如何在多个窗口中更新JList?

时间:2014-03-28 08:39:18

标签: java swing jlist

我正在尝试在多个窗口上更新JList。我怎样才能做到这一点?

这是我的代码,请帮助我。

samplListModel = new DefaultListModel<String>();
sampleList = new JList<String>(samplListModel);
samplListModel.addElement("Cities");
cityField = new JTextField();
cityField.setColumns(10);
cityButton = new JButton("Update");
JPanel panel = new JPanel();
panel.add(sampleList);
panel.add(cityField);
panel.add(cityButton);
this.add(panel);
this.setSize(500, 400);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
cityButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent ae) {
            samplListModel.addElement(cityField.getText());
            cityField.setText("");
        }
    });

2 个答案:

答案 0 :(得分:2)

只需使用相同的 DefaultListModel {/ 1>}({1}}(意思是两个)每个窗口。在下面的示例中,我使用JList您可以键入内容,按Enter键,您将看到两个列表都已更新。对此并不多。

JDialog

答案 1 :(得分:1)

您必须对两个ListModel使用相同的JList才能使列表保持同步。例如,您可以创建一个扩展DefaultListModel<String>的类并将其实现为单例。例如:

class MyListModel extends DefaultListModel<String> {

    /**
     * The one and only instance of the class.
     */
    private static final MyListModel INSTANCE = new MyListModel();

    /**
     * We don't want any other instantiations. Hence make the constructor private.
     */
    private MyListModel() { }

    /**
     * Getter for the instance of this class.
     * 
     * @return the instance of this class
     */
    public static MyListModel getInstance() {
        return INSTANCE;
    }

}

然后你将使用单身人士创建JList

sampleList = new JList<String>(MyListModel.getInstance());

对于ListModel上的所有其他操作,您也必须使用MyListModel.getInstance()