我有一个在开始时只有一个值的JComboBox,并且有一个连接到它的MouseListener。当我单击JComboBox时,我会用一些新值填充它。但popupMenu的大小相当于第一次单击JComboBox时的一个元素的大小。第二次,所有值都将显示为正常。你知道如何让comboBox在更新其内容后直接更新其popupMenu吗?
示例程序:
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) {}
}发布于 2013-05-10 16:45:42
我认为这是更好的解决方案:
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) {
}
}发布于 2013-05-10 16:56:24
我有一个在开始时只有一个值的JComboBox,并且有一个连接到它的MouseListener。当我单击JComboBox时,我会用一些新值填充它
Item(s) to JComboBox on runtime可以是add/remove/modify into XxxComboBoxModel only发布于 2013-05-10 16:37:30
尝试使用mousePressed()或mouseReleased()事件而不是mouseClicked()事件。此外,您还必须使用repaint()才能使更改可见。
@Override
public void mousePressed(MouseEvent e) {
System.out.println("Pressed");
if(box.getItemCount() == 1){
box.removeAllItems();
box.addItem("item 1");
box.addItem("item 2");
box.addItem("item 3");
repaint();
}
}https://stackoverflow.com/questions/16478024
复制相似问题