在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
}
答
对我的作品在此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
不直接加上'Items'到'JComboBox',添加一个新的'Item'到'ComboBoxModel' – mKorbel
我能想到的基于至少3个问题你的陈述。谨慎选择并提出1个问题? –