簡體   English   中英

有關帶有actionlistner的JComboBox的問題

[英]Issue about JComboBox with actionlistner

對於下面的示例,我正在編寫一個包含數據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);
}

}

您正在使用ArrayList數據設置JComboBox的模型 (此處可能是DefaultComboBoxModel),但是后來更改ArrayList的數據后就不會,並且一旦設置好模型也就不會更改(盡管對於其他集合,可能會有風險)發生的事情)。

最好還是繼續使用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的數據顯示中。

要從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
                }
            }
        });  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM