2012-09-06 42 views
0

我在我的Java應用程序中遇到JMenuBar位置的問題。是否可以移動JMenuBar而不將其添加到JPanel中

我實際上使用article的ComponentResizer.java代碼。

和所有的調整大小工作正常,除了從我的應用程序的北部地區 (未修飾的JFrame)及其角落(北部地區),因爲JMenuBar阻止我從該區域調整大小。

是否有解決方案或者可能是一個黑客移動JMenuBar一點點或啓用調整大小 在北方地區?

我也使用setJMenuBar()方法將JMenuBar添加到我的應用程序的北部區域。

代碼:

public class MyApp extends JFrame { 

private MyApp frame; 
private JMenuBar menuBar; 

public static void main(String[] args) { 
    frame = new MyApp(); 
    frame.setUndecorated(true); 
    frame.setVisible(true); 
} 
public MyApp(){ 
    initComponents(); 
} 
private void initComponents(){ 
    setTitle("MediaForm"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 673, 482); 
    menuBar = new JMenuBar(); 
    setJMenuBar(menuBar); 
} 
} 
+0

請編輯您的問題包括[SSCCE(http://sscce.org/)表現出您所描述的問題。無需重複「ComponentResizer」。 – trashgod

回答

1

我沒有測試這一點,但JRootPaneJComponet,有可能爲EmptyBorder添加到它,從而使JMenuBar偏移。

如果做不到這一點,你可能需要實現自己的JRootPane管理JMenuBar &內容窗格

UPDATE的佈局與測試

public class TestMenuFrame extends JFrame { 

    public TestMenuFrame() throws HeadlessException { 

     setTitle("Test"); 

     getRootPane().setBorder(new EmptyBorder(10, 10, 10, 10)); 

     JMenuBar mb = new JMenuBar(); 
     mb.add(new JMenu("Test")); 

     setJMenuBar(mb); 

     setSize(100, 100); 

     getContentPane().setBackground(Color.RED); 

     setLocationRelativeTo(null); 

    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     new TestMenuFrame().setVisible(true); 

    } 
} 

Sample

+0

我不認爲這是我的問題。我只是無法訪問我的應用程序的北部地區的JFrame監聽器 – PeGiannOS

+0

而我使用了未修飾的幀。感謝您的快速回答 – PeGiannOS

+0

首先,如果您可以將組件添加到任何你只需要遍歷組件的層次結構,直到到達JRootPane,除此之外,你說你使用了setJMenu,這意味着你必須有權訪問該框架。其次,我幾乎認爲使用未修飾的框架會對我建議的解決方案產生任何影響 – MadProgrammer

1

延伸的JMenuBar JComponent,因此您可以將它放在任何可以放置普通組件的地方。請注意,如果將用戶放到意外的位置,可能會讓用戶感到困惑。

也看到這一點:add JMenuBar to a JPanel?

+0

如何從JFrame中刪除JMenuBar以添加新的Jpanel,然後在其上添加JMenuBar而不會丟失其內容 – PeGiannOS

+0

實際上,它自己。謝謝你的幫助。它真的幫了我。 – PeGiannOS

相關問題