【问题标题】:Issue about JComboBox with actionlistner关于 JComboBox 宽度 actionlistener 的问题
【发布时间】:2015-03-11 16:12:10
【问题描述】:

对于下面的示例,我正在编写一个数据为 1、3、5、7、9 的 JComboBox,并期望在按下 OK 后它将变为 2、4、6、8、10。但是它只是不起作用.....任何建议将不胜感激,谢谢。

public class Test extends JFrame{

Test (){
    final ArrayList<Integer> value = new ArrayList<>();
    value.add(1);                                                           
    value.add(3);                                                          
    value.add(5);                   
    value.add(7);
    value.add(9);
    final JComboBox pulldown = new JComboBox(value.toArray());
    add(pulldown);

    JButton ok = new JButton("OK");
    add(ok);

    ok.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
         int data [] = {2,4,6,8,10};                                       
         value.clear();
         for (int i=0; i < data.length; i++)
         {
         value.add(data[i]);  
         System.out.println(data[i]);
         }
        }
    });


}

public static void main(String[] args) {
    JFrame frame = new Test();
    frame.setLayout(new FlowLayout());
    frame.setSize(320, 240);
    frame.setVisible(true);
    frame.setResizable(true);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

}

【问题讨论】:

  • 怎么不行?请包括回答您的问题所需的详细信息。谢谢!

标签: java swing actionlistener jcombobox


【解决方案1】:

您正在使用 ArrayList 数据来设置 JComboBox 的 模型(这里可能是 DefaultComboBoxModel),但后来更改 ArrayList 的数据不应该也可能不会更改模型set (尽管对于其他集合可能存在发生这种情况的风险)。

最好还是直接使用 DefaultComboBoxModel。

DefaultComboBoxModel<Integer>  model = new DefaultComboBoxModel<>();
model.addElement(1);                                                           
model.addElement(3);                                                          
model.addElement(5);                   
model.addElement(7);
model.addElement(9);

final JComboBox pulldown = new JComboBox(model);

然后您可以稍后更改模型的数据,并确保更改将反映在 JComboBox 的数据显示中。

【讨论】:

    【解决方案2】:

    要从JComboBox 中删除所有旧值,您需要调用方法myComboBox.removeAllItems() 并添加新项目,您需要调用myComboBox.addItem(myobject)。更改这部分代码,

    ok.addActionListener(new ActionListener() {
    
    
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    // TODO Auto-generated method stub
                    pulldown.removeAllItems();//removing all previous items
                    int data[] = { 2, 4, 6, 8, 10 };
                    value.clear();
                    for (int i = 0; i < data.length; i++) {
                         pulldown.addItem(data[i]);//adding new items
                    }
                }
            });  
    

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 2011-06-05
      • 2023-03-29
      • 2010-12-23
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多