我使用WindowBuilder Pro来生成下面的GuiTest类中的大部分代码,除了添加(或改变)的右侧的''行外。 WindowBuilder Pro(一种所见即所得)不断向构造函数中添加代码 - 但还没有投诉我进行修改。我想以这种方式继续使用WindowBuilder Pro进行构建,因此我不想对GUI的一般体系结构进行更改。
我还在下面创建了一个DataTest类来模拟收集数据集的某个缓慢过程。
这是我的问题:
我想要做的是用DataTest类中的新数据更新JList。
GuiTest类别:
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类:
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";
}
}