我有一个 JComboBox
,一开始只有一个值,并且有一个 MouseListener 连接到它。当我单击 JComboBox
时,我用一些新值填充它。但是,第一次单击 JComboBox 时,弹出菜单的大小为一个元素的大小。第二次所有值将正常显示。
知道如何让组合框在更新其内容后直接更新其弹出菜单吗?
示例程序:
public class ComboBoxUpdate extends JFrame implements MouseListener {
private JComboBox<String> box;
public ComboBoxUpdate(){
// Init
JPanel panel = new JPanel();
box = new JComboBox<String>();
box.addItem("from start");
// Add listener
Component[] comps = box.getComponents();
for(int i = 0; i < comps.length; i++)
comps[i].addMouseListener(this);
panel.add(box);
this.add(panel);
this.pack();
this.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e) {
if(box.getItemCount() == 1){
box.removeAllItems();
box.addItem("item 1");
box.addItem("item 2");
box.addItem("item 3");
}
}
public static void main(String[] args){
new ComboBoxUpdate();
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}
最佳答案
我认为这是更好的解决方案:
public class ComboBoxUpdate extends JFrame implements PopupMenuListener {
private JComboBox box;
public ComboBoxUpdate() {
// Init
JPanel panel = new JPanel();
box = new JComboBox();
box.addItem("from start");
box.addPopupMenuListener(this);
panel.add(box);
this.add(panel);
this.pack();
this.setVisible(true);
}
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
if (box.getItemCount() == 1) {
box.removeAllItems();
box.addItem("item 1");
box.addItem("item 2");
box.addItem("item 3");
}
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {
}
}
关于java - 更新 JComboBox 弹出菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478024/