[英]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.