在java中添加项目运行时组合框

问题描述:

我已经创建了一个组合框Swing我想在其他函数中添加项目。但问题是,项目不会调用该函数后会显示:在java中添加项目运行时组合框

public void addItems() 
{ 
    combo.addItem(""); 
    // i want to add items here when this function is being called 
    // but those items are not displaying after calling this function 
    // i m calling this function on button click 
} 
+2

不直接加上'Items'到'JComboBox',添加一个新的'Item'到'ComboBoxModel' – mKorbel

+1

我能想到的基于至少3个问题你的陈述。谨慎选择并提出1个问题? –

对我的作品在此SSCCE

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestComboBox { 

    private int count = 0; 

    protected void initUI() { 
     final JFrame frame = new JFrame(TestComboBox.class.getSimpleName()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     final JComboBox comboBox = new JComboBox(new Object[] { "Something", "Stuff", "Beep" }); 
     JButton add = new JButton("Add item"); 
     add.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       comboBox.addItem("Item-" + count++); 
      } 
     }); 
     frame.add(comboBox); 
     frame.add(add, BorderLayout.SOUTH); 
     frame.pack(); 
     frame.setBounds(50, 50, 300, frame.getHeight()); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, 
      UnsupportedLookAndFeelException { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new TestComboBox().initUI(); 
      } 
     }); 
    } 
} 

如果你的组合框有MutableComboBoxModel,你可以做以下

MutableComboBoxModel model = (MutableComboBoxModel)combo.getModel(); 
model.addElement(elementToAdd); 

这相当于调用JComboBox#addItem(参见下面的实现):

public void addItem(Object anObject) { 
    checkMutableComboBoxModel(); 
    ((MutableComboBoxModel)dataModel).addElement(anObject); 
} 

但我认为最好的做法是直接修改模型,如果你想在模型上进行修改而不是通过视图(除了为用户提供在视图中编辑的能力)

你需要调用:

repaint(); 
validate(); 
+4

不是,你错了(重新)验证和repaint是添加,删除(添加和删除)或修改JComponents在运行时,这些方法是为LayoutManager,而不是添加一个新的项目JComboBox在运行时,请删除或修改这个问题 – mKorbel