状況で少し頭が痛いです。たぶん、あなたの何人かは以前にこれを経験したことがあり、別の方法やここでの私のエラーさえも教えてくれます.
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 に追加されます
2 つ目は、まったく同じインスタンス化と同じテストを実行し
ます コンポーネントの動作が異なります:
- JPopupMenu が消えます
- コンボに選択が追加されません
ここに何かアイデアはありますか?
前もって感謝します..