2011-09-13 2 views
2

JMenu를 마우스로 클릭하면 올바르게 작동합니다.JTree에 포커스가있을 때 JMenu가 JMenu 뒤에 표시됩니까?

before

(정상) 나는 멀리 내 마우스를 클릭하고 사라집니다. 그런 다음 JTree에서 유일한 항목을 두 번 클릭합니다.

그런 다음 내 JMenu를 클릭하면 다음과 같이 보입니다. JTree 뒤에 나타납니다 ??? after

창 크기를 조정하면 정상으로 돌아갑니다. JTree에 다시 집중할 때까지.

이 내 코드는, 내가 JFrame의 하위 클래스를 것 같은 모습이 코드 당신은 스윙과 AWT 성분을 혼합하고 생성자

Container cp = getContentPane(); 

//1. menu 
JMenuBar menu = new JMenuBar(); 
//... 

cp.add(menu, BorderLayout.NORTH); 

//2. split pane 
JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); 
//... 
{ 
    //3a. scrollpane (left) 
    ScrollPane treeView = new ScrollPane(); 
    treeView.setMinimumSize(new Dimension(0,0)); 
    sp.add(treeView, JSplitPane.LEFT); 
    { 
     //3ai. treeview 
     tree = new ObjectTree(); 
     treeView.add(tree); 
    } 

    //3b. scrollpane (right) 
    ScrollPane tabView = new ScrollPane(); 
    tabView.setMinimumSize(new Dimension(0,0)); 
    sp.add(tabView, JSplitPane.RIGHT); 
    { 
     //3bi tabview 
     ObjectTabPane view = new ObjectTabPane(); 
     tabView.add(view); 
    } 
} 

cp.add(sp, BorderLayout.CENTER); 
this.setSize(700, 500); 
+0

포커스를 잃었을 때 실제로 메뉴가 닫히지 않아야합니까? – Thomas

+0

초점이 없어지면 닫힙니다. 그러나 Jtree에서 유일한 항목을 클릭 한 다음 메뉴를 다시 클릭하십시오. 이제 메뉴에 포커스가 있지만 트리 뒤에 있습니다 –

+0

JMenuBar가 contentpane에 없어야합니다. – Neifen

답변

5

에있는 것입니다. 당신이 직면하고있는 문제로 연결되기 때문에 이것을하지 마십시오. ScrollPane 대신 JScrollpane을 사용하십시오.

+0

+1 hmmm이지만 swing.JFrame v.s. 또한 Java1.6_012에서 http://java.sun.com/products/jfc/tsc/articles/mixing/ 및 http://java.sun.com/developer/technicalArticles/GUI/mixing_components/이 허용되므로 awt.Frame도 가능합니다. – mKorbel

+0

하하하, 나는 스크롤 창 앞에 J 형을 입력하지 않았다는 것을 믿을 수 없다. –

관련 문제