java - 自定义 JComboBox 隐藏 JPopupMenu

标签 java swing jcombobox custom-component jpopupmenu

我有点头疼。也许你们中的一些人以前经历过这种情况,可以告诉我另一种方式,甚至可以告诉我这里的错误。

我需要在 JComboBox 中添加一个 JTree,下面的代码非常有用。

public class HierarchyComboBox extends JComboBox {
    HierarchyTree ht = new HierarchyTree();
    HierarchyComboBox box;
    JPopupMenu popup;
    MouseAdapter adapter = new MouseAdapter() { 
        @Override
        public void mouseClicked(MouseEvent arg0) {
            if (arg0.getClickCount() == 1) {
                removeAllItems();
                addItem(ht.getSelectedLevel());
//              ((JPopupMenu) comp).setVisible(false);
            }
        }
    };


    PopupMenuListener listener = new PopupMenuListener() {
        @Override
        public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
            if (box == null) {
                box = (HierarchyComboBox) e.getSource();
                if (popup == null) {
                    final Object comp = box.getUI().getAccessibleChild(box, 0);
                    if (!(comp instanceof JPopupMenu))
                        return;
                    popup = (JPopupMenu) comp;
                }
                popup.removeAll();
                ht.getTreePane().setBorder(null);
                ht.getTreePane().setPreferredSize(new Dimension(box.getWidth(), 200));
                MyTree tree = (MyTree)ht.getTreePane().getViewport().getComponent(0);
                tree.addMouseListener(adapter);
                popup.add(ht.getTreePane());
            }
        }
        @Override
        public void popupMenuCanceled(PopupMenuEvent arg0) { }
        @Override
        public void popupMenuWillBecomeInvisible(PopupMenuEvent arg0) { }
    };

    public HierarchyComboBox() {
        setEditable(true);
        addPopupMenuListener(listener);
    }
}

但我将此组件添加到 2 个不同的对话框中。
我可以单击第一个并将选择添加到 JComboBox

第二个,执行完全相同的实例化和相同的测试

该组件具有不同的行为:
- JPopupMenu 消失
- 它不会将选择添加到组合

有什么想法吗?
提前致谢..

最佳答案

如图Providing a Custom Renderer , "组合框使用渲染器来显示其菜单中的每个项目。"您可以在自定义 ListCellRenderer 中渲染树。或者,

  • 响应 ActionListener,在相邻组件中渲染树。

  • 使用分层模型,显示 here .

关于java - 自定义 JComboBox 隐藏 JPopupMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17471789/

相关文章:

java - 我可以向 JFrame 添加 CSS 文件吗?

java - 是否有任何现有的 Swing 组件可以做到这一点?

java - 我无法将数据库中的项目输入 JComboBox

java - 如何找到java非阻塞方法的执行时间

java - 更改另一个类的 JLabel 文本

Java : Implementing iterator for user-created HashSet class. next() 和 hasNext() 的语义?

java - JPanel 中的自动循环滚动 Activity 内容 - 选取框文本

Java:图像上的 JComboBox 选择问题

java - 使用maven导入时出现NoClassDefFoundError

java - Mychart 确实显示了 android 中的任何内容