首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新JComboBox popupMenu

更新JComboBox popupMenu
EN

Stack Overflow用户
提问于 2013-05-10 16:28:01
回答 3查看 1.8K关注 0票数 0

我有一个在开始时只有一个值的JComboBox,并且有一个连接到它的MouseListener。当我单击JComboBox时,我会用一些新值填充它。但popupMenu的大小相当于第一次单击JComboBox时的一个元素的大小。第二次,所有值都将显示为正常。你知道如何让comboBox在更新其内容后直接更新其popupMenu吗?

示例程序:

代码语言:javascript
复制
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) {}
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-10 16:45:42

我认为这是更好的解决方案:

代码语言:javascript
复制
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) {
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-05-10 16:56:24

我有一个在开始时只有一个值的JComboBox,并且有一个连接到它的MouseListener。当我单击JComboBox时,我会用一些新值填充它

  1. Item(s) to JComboBox on runtime可以是add/remove/modify into XxxComboBoxModel only
  2. use DefaultComboBoxModel in you only all Items
  3. MutableComboBoxModel for add/remove/modify Item(s) on runtime
票数 1
EN

Stack Overflow用户

发布于 2013-05-10 16:37:30

尝试使用mousePressed()mouseReleased()事件而不是mouseClicked()事件。此外,您还必须使用repaint()才能使更改可见。

代码语言:javascript
复制
       @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();
             }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16478024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档