I verwendet Windowbuilder Pro Großteil des Codes in der GuiTest Klasse unten, mit Ausnahme von Linien mit ‚////////‘ nach rechts zu erzeugen, die ich hinzugefügt (oder verändert). WindowBuilder Pro (ein WYSIWYG) fügt dem Konstruktor Code hinzu - hat sich jedoch noch nicht bei mir über Änderungen beschwert. Ich möchte weiterhin mit WindowBuilder Pro auf diese Weise bauen, also Ich möchte keine Änderungen an der allgemeinen Architektur der GUI vornehmen.-Update eines Java Swing JList
Ich habe auch eine DataTest-Klasse weiter unten erstellt, um einen bestimmten langsamen Prozess des Sammelns eines Datensatzes zu emulieren.
Hier ist meine Frage: Was ich tun möchte, ist die JList mit den neuen Daten aus der Klasse DATATEST aktualisieren.
GuiTest Klasse:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; ///////////
import javax.swing.JList;
import javax.swing.JLabel;
import discoverTool.DataTest;
public class GuiTest extends JFrame implements ListSelectionListener{
private String[] foo = {"thing1","thing2","thing3"}; //////////////
private JPanel contentPane;
private JLabel lblNewLabel; //////////////made global
/**
* Launch the application.
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GuiTest frame = new GuiTest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
DataTest dt = new DataTest();/////////////
GuiTest gt = new GuiTest();
gt.foo = dt.foo;
gt.updateJList(dt.foo);
}
public void updateJList(String[] f){
//reset the list with f
}
/**
* Create the frame.
*/
public GuiTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JList list = new JList(foo);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); /////////////
list.setSelectedIndex(0); //////////////
list.addListSelectionListener(this); //////////////
list.setBounds(10, 11, 134, 240);
contentPane.add(list);
JPanel panel = new JPanel();
panel.setBounds(154, 11, 188, 81);
contentPane.add(panel);
panel.setLayout(null);
//JLabel lblNewLabel = new JLabel("New label");/////////
lblNewLabel = new JLabel("New label");///////////
lblNewLabel.setBounds(10, 11, 46, 14);
panel.add(lblNewLabel);
}
public void valueChanged(ListSelectionEvent e) {///////////////
JList jList = (JList)e.getSource();////////////
lblNewLabel.setText(foo[jList.getSelectedIndex()]);///////////
}///////////
}
DATATEST Klasse:
public class DataTest {
public String[] foo;
public DataTest() throws InterruptedException{
//simulate a long process getting data;
Thread.sleep(7000);
foo = new String[4];
foo[0]="hey";
foo[1]="hi";
foo[2]="bye";
foo[3]="adios";
}
}
WindowBuilder ist nicht auf absolute Koordinaten beschränkt; Sie können alle gängigen Layout-Manager verwenden: GridBagLayout, MiGLayout, SpringLayout, FormLayout, GroupLayout usw. Wenn Sie viel GUI-Code von Hand schreiben, sollten Sie es versuchen. – rob