簡體   English   中英

自定義JComboBox隱藏JPopupMenu

[英]Custom JComboBox hiding 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消失了
- 它不會將選擇添加到組合中

這里有什么想法?
提前致謝..

提供自定義渲染器中所示 ,“組合框使用渲染器在其菜單中顯示每個項目。” 可以在自定義ListCellRenderer呈現樹。 或者,

  • 在相鄰組件中渲染樹以響應ActionListener

  • 使用此處顯示的分層模型。

我注意到JPopupMenu正在失去它的焦點。

解決方案是將組件添加為Panel的最后一個組件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM