2010-11-28 7 views

답변

13

당신은 당신의 JPanel을위한 BorderLayout를 사용하고

JPanel p = new JPanel(); 
p.setLayout(new BorderLayout()); 
p.add(menubar, BorderLayout.NORTH); 

의 JMenuBar JComponent을하고 다른 같은 컨테이너에 추가 할 수 있습니다와 패널의 북쪽 지역으로의 JMenuBar를 넣을 수 있습니다 JComponent

+3

JFrame의 – Enrique

+0

Works에만 JMenuBar를 추가 할 수 있다고 생각했는데 맨 위에 추가하지 못하게되었습니다. 그러나 충분히 가깝다! – Skizit

+0

BorderLayout.PAGE_START가 나를 위해 맨 위에 놓은 것 같습니다. –

4

JMenuBars는 setJMenuBar 메서드를 사용하여 JFrame에 설정됩니다.

사용 방법에 대한 다음 자습서를 참조하십시오.

http://download.oracle.com/javase/tutorial/uiswing/components/menu.html

+0

JPanel에 직접 추가 할 수 없습니까? 거기에 다른 항목이 있습니다 ... JFrame을 추가하면 Panel 항목을 그릴 수 없습니까? – Skizit

+2

음, JMenuBar는 또 다른 JComponent이므로 다른 것과 마찬가지로 JPanel에 추가 할 수 있습니다. 그러나 JFrame에 연결되도록 설계되었으므로 올바르게 작동하지 않을 수도 있습니다 (또는 전혀 아닐 수도 있습니다). – Codemwnci

0

도 시도했지만 JMenuItemJmenu이고 JmenuBarJPanel에 추가되지 않았습니다. JFrame의 레이아웃을 null로 선언하면 JMenuBar 인스턴스에 setBounds(x, y, width, height)을 사용하고 JFrame에 메뉴 모음을 추가하면 그 느낌을 얻을 수 있습니다.

+0

-1 널 레이아웃을 제안합니다. – kleopatra

0

jDesktopPane을 패널에 놓은 다음 메뉴 바를 추가하십시오. 아래 예에서 탭 패널을 사용하고 있지만 패널에서도 동일하게 작동해야합니다. 당신이 넷빈즈 (충분)에서 "기타 구성 요소"에서의 JMenuBar를 추가 할 필요가 있지만

JDesktopPane desktopPane = new JDesktopPane(); 
    tabbedPane.addTab("New tab", null, desktopPane, null); 

    JMenuBar menuBar_1 = new JMenuBar(); 
    menuBar_1.setBounds(0, 0, 441, 21); 
    desktopPane.add(menuBar_1); 
+0

음 ... 왜 JDesktopPane입니까? – kleopatra

+0

여러 개의 세계 바람보기를 표시하기 위해 각 분리 가능 탭에 메뉴 모음이 있어야하는 앱을 만들고 있습니다. 이것은 그것을하는 좋은 방법처럼 보였다. 각 창마다 별도의 메뉴 모음이있는 다른 방법을 찾을 수 없습니다. – user2248926

0

나는, 다른 해결책이있다. JPanel을 만든 다음 전체 JPanel을 채우는 내부에 다른 JPanel을 추가합니다 (자식이라고 부름). 컨트롤을 하위 패널에 배치합니다. 그런 다음 JMenuBar를 추가하지만 NetBeans가이를 "기타 구성 요소"에 배치합니다. 소스를 편집하고 ctor에에는 "initComponents"장소는이 함수를 호출 호출 후 :

public static void setJPanelMenuBar(JPanel parent, JPanel child, JMenuBar menuBar) { 
    parent.removeAll(); 
    parent.setLayout(new BorderLayout()); 
    JRootPane root = new JRootPane(); 
    parent.add(root, BorderLayout.CENTER); 
    root.setJMenuBar(menuBar); 
    root.getContentPane().add(child); 
    parent.putClientProperty("root", root); //if you need later 
    } 

예를 들어, 당신의 ctor는 다음과 같습니다 나를 위해

public MyPanel() { 
    initComponents(); 
    setJPanelMenuBar(this, child, myMenuBar); 
    } 

작품. JInternalFrame 소스 코드를보고 아이디어를 얻었습니다. 모두 JPanel을 JRootPane()으로 대체 한 다음 하위를 루트 창 콘텐츠 창에 배치합니다.

관련 문제