Hinzufügen arraylist zu Jlist
Ich habe eine arraylist in meiner metod receiveArrayLists, die ich hinzufügen möchten für eine JList. Wie kann ich dies tun?
import java.awt.Dimension;
import java.awt.Scrollbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class GUI implements Runnable {
private Server server;
private JFrame frame = new JFrame();
private JTextField jtf = new JTextField();
private JList jl = new JList();
private JTextArea jl1 = new JTextArea();
private JScrollPane pane = new JScrollPane(jl);
private Socket socket;
private DataInputStream dis;
private ObjectInputStream ois = null;
private DataOutputStream dos;
public GUI() {
socket = new Socket();
InetSocketAddress ipPort = new InetSocketAddress("127.0.0.1", 4444);
try {
socket.connect(ipPort);
dis = new DataInputStream(socket.getInputStream());
dos = new DataOutputStream(socket.getOutputStream());
} catch (Exception e) {
}
new Thread(this).start();
frame.getContentPane().setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(50, 300, 420, 400);
frame.setResizable(false);
frame.setVisible(true);
pane.add(jl);
pane.add(jl1);
jl1.setEditable(false);
jtf.setBounds(50, 40, 150, 40);
jl.setBounds(50, 90, 150, 200);
jl1.setBounds(210, 90, 150, 200);
jtf.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if (dos != null) {
if(jtf.getText().length() >0){
try {
dos.writeUTF(jtf.getText());
} catch (IOException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
}else{
jl1.setText("");
}
}
}
});
frame.add(jtf);
frame.add(jl);
frame.add(jl1);
frame.add(pane);
}
public void run() {
String fromServer;
try {
while ((fromServer = dis.readUTF()) != null) {
if (fromServer.equals("read")) {
receiveArrayList();
}
}
} catch (Exception e) {
}
}
Hier ist mein metod, wie Sie sehen können, ich versuche es mal mit Anhängen, die offensichtlich nicht funktioniert, fügen Sie eine arraylist an eine JList
public void receiveArrayList() {
try {
jl1.setText("");
ois = new ObjectInputStream(socket.getInputStream());
@SuppressWarnings("unchecked")
ArrayList<String> a = (ArrayList<String>) (ois.readObject());
for (int i = 0; i < a.size(); i++) {
jl.append(a.get(i) + " \n");
}
dis = new DataInputStream(socket.getInputStream());
} catch (ClassNotFoundException ex) {
System.out.println(ex);
} catch (IOException ex) {
System.out.println(ex);
}
}
public static void main(String[] args) {
GUI g = new GUI();
}
}
InformationsquelleAutor DrWooolie | 2012-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Am einfachsten erstellen Sie ein DefaultListModel Objekt iteriert durch die ArrayList in einer for-oder foreach-Schleife und fügen Sie die Elemente, um das Modell über seine
addElement(...)
Methode. Legen Sie dann die JList Modell zu Modell.Mehr beteiligt, aber befriedigend ist das erstellen Ihrer eigenen das listmodel durch die Erweiterung AbstractListModel mit Ihrem ArrayList als das Modell der Kern.
die java 7-docs darüber reden, es wurde unterstützt von Vektor-und "in einer zukünftigen Version wird es eine echte Sammlung der Umsetzung" die würde vorschlagen, ansonsten
+1 für das Modell. Mögliche Missverständnis von "Serialisierte Objekte dieser Klasse werden nicht kompatibel mit zukünftigen Swing-Versionen."
Danke, es ist das, was ich Tat und es funktionierte !
Dieser Kommentar ist es in der Java6-docs wie auch. Ich denke, es ist unwahrscheinlich, dass jemals geändert durch Oracle mit Swing in den Wartungsmodus. Zum Beispiel, dass das listmodel ist jetzt generisch ist, ist eine außen-Beitrag. In JavaFX-Ansichten werden unterstützt von (beobachtbaren) Sammlungen (als Ersatz für eine Daten-Modell-Klassen komplett).
InformationsquelleAutor Hovercraft Full Of Eels
Müssen Sie die JList ist Liste Modell. Die einfachste Lösung ist die Verwendung DefaultListModel, aber man könnte untersuchen, die Umsetzung Ihrer eigenen (auf der Grundlage der AbstractListModel)
Wenn Sie nicht wollen, zu halten alle vorherigen Inhalte, wenn Sie die Fehlermeldung " array-Liste können Sie das folgende tun:
Wenn Sie möchten, um die Vorherige Liste, dann müssen Sie sicherstellen, dass das ursprüngliche Modell ist ein
DefaultListModel
(in diesem Beispiel) oder ist kompatibel mit denListModel
Sie verwenden.Grundsätzlich, dann wollen Sie cast Modell:
Möchten Sie vielleicht zu prüfen, diese tutorial für mehr info.
DefaultListModel model = jl.getModel();
Natürlich Sie nicht brauchen, um erneut am Ende 😉
InformationsquelleAutor MadProgrammer