2010-11-28 35 views

Trả lời

13

Bạn có thể sử dụng một BorderLayout cho JPanel của bạn và đặt JMenuBar vào khu vực NORTH của bảng điều khiển với

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

JMenuBar là một JComponent và có thể được thêm vào một container giống như bất kỳ khác JComponent.

+3

Tôi nghĩ bạn chỉ có thể thêm JMenuBar's vào JFrame's – Enrique

+0

Works, sẽ không cho phép tôi thêm nó vào đầu nhưng đủ gần! – Skizit

+0

BorderLayout.PAGE_START dường như đặt nó ở vị trí hàng đầu đối với tôi. –

4

JMenuBars được đặt thành JFrame bằng phương thức setJMenuBar.

Xem hướng dẫn sau về cách sử dụng chúng.

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

+0

Không thể thêm chúng trực tiếp vào JPanel? Tôi đã có các mục khác trên đó ... nếu tôi thêm một JFrame wont nó vẽ trên các mục Panel của tôi? – Skizit

+2

Vâng, một JMenuBar chỉ là một JComponent, vì vậy bạn có thể thêm nó vào JPanel của bạn giống như bạn sẽ làm bất cứ điều gì khác. Tuy nhiên, vì nó được thiết kế để gắn vào một JFrame, nó có thể không hoạt động chính xác (hoặc thậm chí cả!) – Codemwnci

0

Tôi đã thử quá nhưng JMenuItem với JmenuJmenuBar không được thêm vào JPanel. Nhưng bạn có thể có được cảm giác đó nếu bạn khai báo bố cục của JFrame là rỗng sau đó sử dụng setBounds(x, y, width, height) trên cá thể JMenuBar sau đó thêm thanh trình đơn vào JFrame.

+0

-1 để đề xuất bố cục trống – kleopatra

0

Hãy thử đặt một jDesktopPane trên bảng điều khiển của bạn và sau đó thêm một thanh thực đơn vào đó. Tôi đang sử dụng một khung tab trong ví dụ của tôi dưới đây, nhưng nó sẽ làm việc tương tự cho một bảng điều khiển.

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

hmm ... tại sao một JDesktopPane? – kleopatra

+0

Tôi đang xây dựng một ứng dụng mà tôi muốn có thanh thực đơn trong mỗi tab có thể tháo rời để hiển thị nhiều chế độ xem World Wind. Điều này dường như là một cách tốt để làm điều đó. Không thể tìm thấy bất kỳ cách nào khác để có thanh menu men riêng cho mỗi cửa sổ. – user2248926

0

Tôi có một giải pháp khác, mặc dù bạn phải thêm JMenuBar vào "Các thành phần khác" trong NetBeans (đủ tốt). Tạo một JPanel và sau đó thêm một JPanel khác bên trong (gọi nó là child) để lấp đầy toàn bộ JPanel. Đặt điều khiển của bạn trong bảng con. Sau đó thêm JMenuBar nhưng NetBeans sẽ đặt nó trong "Các thành phần khác". Chỉnh sửa mã nguồn của bạn và trong ctor sau khi nó gọi là "initComponents" nơi một cuộc gọi đến chức năng này:

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 
    } 

Ví dụ, ctor của bạn có thể trông như thế này:

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

trình cho tôi. Có ý tưởng bằng cách xem mã nguồn JInternalFrame. Tất cả những gì nó làm là thay thế con JPanel bằng JRootPane() và sau đó đặt con vào ô nội dung của ô gốc.