상황에 약간의 두통이 있습니다. 어쩌면 당신 중 일부는 이전에이 문제를 겪어 왔고 또 다른 방법으로, 아니면 내 실수를 저에게 보여줄 수 있습니다.사용자 정의 JComboBox 숨기기 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를 사라
- 선택 항목을 콤보에 추가하지 않습니다.
여기에 어떤 아이디어가 있습니까?
미리 감사드립니다.
이 경우 트리 하나를 하나의 옵션으로 렌더링합니다. 니가 말하는거야? –
예,하지만 다른 구성 요소로 팝업 방식을 선호합니다. – trashgod
정확합니다. 나는 그 문제를 해결했다. 하지만 답을 주셔서 감사합니다. @trashgod –