java - 更新 JComboBox 弹出菜单

标签 java swing jcombobox

我有一个 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/

相关文章:

java - 我不能让多个小程序与我的 Cpp 服务器通信

java - 如何修复 JTextArea 滚动到底部?

java - JComboBox 使用 DefaultComboBoxModel 修改索引

java - Android-await 不得在 UI 线程上调用

java - AudioFormat.Encoding 构造函数参数的含义是什么?

java - 带有 JSpinner 的 CellEditor 时间格式恢复为日期格式

java - 设置 JDialog block Observer 的模态

java - 单击边框时 JComboBox 弹出窗口立即出现和隐藏(糟糕的用户体验)

java - 组合框链接到 MySQL 和 Jtextfield

java - 在 Java 中加载大图像作为缩略图而没有内存问题?