1

我需要创建一个新方法来检查组合框中所选项目的值。该组合框是从数据库中填充的。

这是获取所选项目的方法:

 combo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {

    String x=(String) combo.getSelectedItem();

字符串“x”保存所选项目的值,因为我需要在我的其他查询中使用“x”。

    ResultSet st = stt.executeQuery("Select Name from Table where Number="+x+"");

通过该查询,我可以填充JList.

问题是,当我在组合框中选择另一个项目时,列表不会更新。所以我需要创建另一个语句来检查组合框的值吗?如果是,如何?

4

1 回答 1

2

让您JList使用ListModel也实现了ActionListener. 将此专用侦听器添加到组合中。每次组合更改时,ListModel都会调用您的动作侦听器。在侦听器中,您可以ListModel就地更新。

附录:这是基本方法。

在此处输入图像描述

/**
 * @see http://stackoverflow.com/a/16587357/230513
 */
public class ListListenerTest {

    private static final String[] items = new String[]{"1", "2", "3"};
    private JComboBox combo = new JComboBox(items);
    private JList list = new JList(new MyModel(combo));

    private static class MyModel extends DefaultListModel implements ActionListener {

        private JComboBox combo;

        public MyModel(JComboBox combo) {
            this.combo = combo;
            addElement(combo.getSelectedItem());
            combo.addActionListener(this);
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            set(0, combo.getSelectedItem());
            System.out.println("Combo changed.");
        }
    }

    private void display() {
        JFrame f = new JFrame("ListListenerTest");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(1, 0));
        f.add(combo);
        f.add(list);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ListListenerTest().display();
            }
        });
    }
}
于 2013-05-16T12:24:30.003 回答