L'ajout de liste de tableaux à Jlist
J'ai une liste de tableaux dans mon metod receiveArrayLists que je voulais ajouter à une JList. Comment puis-je faire cela?
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) {
}
}
Voici mon metod, comme vous pouvez le voir, j'essaie d'utiliser append qui, évidemment, ne fonctionnent pas pour ajouter une arraylist dans une 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();
}
}
OriginalL'auteur DrWooolie | 2012-07-20
Vous devez vous connecter pour publier un commentaire.
Le plus simple est de créer un DefaultListModel objet, itérer sur la liste de tableaux dans une pour ou boucle foreach et ajouter les éléments du modèle par l'intermédiaire de son
addElement(...)
méthode. Définissez ensuite la JList du modèle de votre modèle.Plus en cause, mais la satisfaction est de créer votre propre ListModel en étendant AbstractListModel à l'aide de votre liste de tableaux comme le modèle du noyau.
la java 7 docs de parler de l'été soutenu par Vecteur et "dans une future version, ce sera une véritable Collection de la mise en œuvre", qui suggèrent le contraire
+1 pour l'utilisation du modèle. Malentendu Possible de "Sérialisée des objets de cette classe ne sera pas compatible avec les futures Swing de presse".
Merci, c'est ce que j'ai fait et cela a fonctionné !
Ce commentaire est-il dans les Java6 docs. Je pense que c'est rare d'être à jamais changé par Oracle avec Swing en mode de maintenance. Par exemple que ListModel est maintenant générique est un en dehors de la contribution. En JavaFX vues sont soutenus par l' (observables) collections (en remplacement de toutes les données des classes de modèle complètement).
OriginalL'auteur Hovercraft Full Of Eels
Vous avez besoin de faire usage de la JList est liste modèle. La solution la plus simple est d'utiliser DefaultListModel, mais vous pourriez étudier la mise en œuvre de votre propre (basé sur le AbstractListModel)
Si vous ne voulez pas garder tout contenu précédent lorsque vous recevez la liste de tableau, vous pouvez effectuer les opérations suivantes:
Si vous voulez garder la liste précédente, alors vous devez vous assurer que le modèle d'origine est un
DefaultListModel
(dans cet exemple) ou est compatible avec lesListModel
vous utilisez.Fondamentalement, vous voulez jeter le modèle:
Vous voudrez peut-être vérifier ce tutoriel pour plus d'info.
DefaultListModel modèle = jl.getModel();
Évidemment, vous n'aurez pas besoin de la remettre à la fin 😉
OriginalL'auteur MadProgrammer