我在 Swing 中创建了一个 comboBox ,我想在另一个函数中添加项目。但问题是在调用该函数后项目没有显示:
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
}
答案 0 :(得分:3)
在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();
}
});
}
}
答案 1 :(得分:2)
如果您的组合框有MutableComboBoxModel
,您可以执行以下操作
MutableComboBoxModel model = (MutableComboBoxModel)combo.getModel();
model.addElement( elementToAdd );
这相当于调用JComboBox#addItem
(请参阅下面的实现):
public void addItem(Object anObject) {
checkMutableComboBoxModel();
((MutableComboBoxModel)dataModel).addElement(anObject);
}
但我认为如果你想在模型方面进行更改而不是浏览视图(除了为用户提供在视图中编辑的能力),最好直接修改模型。
答案 2 :(得分:-2)
你需要调用:
repaint();
validate();