2016-08-24 51 views
1

aboutWindow框架打開時,只有標籤(-contents)name可見,菜單欄丟失。當標籤被註釋掉時,會出現該條,但會填充整個框架。我錯過了什麼?JLabel覆蓋JMenuBar

import javax.swing.*; 
import java.net.*; 
import java.awt.event.*; 

public class Main 
{ 

    public static JDialog aboutWindow; 

    public static void about() { 
    //JDialog aboutWindow = new JDialog(); 
    Main.aboutWindow = new JDialog(); 
    Main.aboutWindow.setTitle("About kingfisher a0.0.3"); 
    Main.aboutWindow.setSize(300,600); 
    Main.aboutWindow.setModal(true); 
     JMenuBar menubar = new JMenuBar(); 
      JMenu control = new JMenu("Control"); 
       JMenuItem quit = new JMenuItem("quit"); 
        quit.addActionListener(new ActionListene121r() { 
         public void actionPerformed(ActionEvent event) { 
          Main.aboutWindow.setVisible(false); 
          } 
         } 
        ); 
       control.add(quit); 
      menubar.add(control); 
     Main.aboutWindow.add(menubar); 
    JLabel name = new JLabel("kingfisher"); 
    Main.aboutWindow.add(name); 
    Main.aboutWindow.setVisible(false); 
    } 


    public static void main (String args[]){ 
    //Defined window dimensions 
    JFrame controlpanel = new JFrame(); 
    controlpanel.setTitle("kingfisher Control Panel"); 
    controlpanel.setSize(500,400); 
    controlpanel.add(new JLabel("The angels have the blue box")); 
     JMenuBar menubar = new JMenuBar(); 
     //defining menu groups 
      JMenu windows = new JMenu("Windows"); 
       JCheckBoxMenuItem chat = new JCheckBoxMenuItem("Chat"); 
       JCheckBoxMenuItem filetransfer = new JCheckBoxMenuItem("Filetransfer"); 
       JCheckBoxMenuItem settings = new JCheckBoxMenuItem("Settings"); 
       windows.add(chat); 
       windows.add(filetransfer); 
       windows.add(settings); 
      JMenu control = new JMenu("Control"); 
       JMenuItem quit = new JMenuItem("Quit"); 
       quit.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent event) { 
         System.exit(0); 
         } 
        } 
       ); 
       control.add(quit); 
      JMenu help = new JMenu("Help"); 
       JMenuItem support = new JMenuItem("Support"); 
       JMenuItem about = new JMenuItem("About"); 
        about.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent event) { 
          Main.aboutWindow.setVisible(true); 
          } 
         } 
        ); 
       help.add(support); 
       help.add(about); 
      menubar.add(control); 
      menubar.add(windows); 
      menubar.add(help); 
     controlpanel.setJMenuBar(menubar); 
    controlpanel.setVisible(true); 
    }; 
}; 
+0

運行該代碼(將'new ActionListene121r'更改爲'new ActionListener'後)在這裏產生'NullPointerException' .. –

+0

哎呀,這些錯別字是不是打算。但'NullPointerExeption',我看不到。哪些LOC會引用錯誤? – sam4ritan

+0

這是一種有趣的格式化風格,至少可以說...你的標籤都在商店 – Drgabble

回答

3

,而不是添加的JMenuBar的,使用JDialog.setJMenuBar

Main.aboutWindow = new JDialog(); 
    Main.aboutWindow.setTitle("About kingfisher a0.0.3"); 
    Main.aboutWindow.setSize(300,600); 
    Main.aboutWindow.setModal(true); 
     JMenuBar menubar = new JMenuBar(); 
      JMenu control = new JMenu("Control"); 
       JMenuItem quit = new JMenuItem("quit"); 
        quit.addActionListener(new ActionListene121r() { 
         public void actionPerformed(ActionEvent event) { 
          Main.aboutWindow.setVisible(false); 
          } 
         } 
        ); 
       control.add(quit); 
      menubar.add(control); 

     Main.aboutWindow.setJMenuBar(menubar); //changed 

    JLabel name = new JLabel("kingfisher"); 
    Main.aboutWindow.add(name); 
    Main.aboutWindow.setVisible(false); 
+0

謝謝,那就是我正在尋找的 – sam4ritan

1

JDialog使用BorderLayout佈局通過默認情況下,不指定位置組件添加到這種佈局的,它們在中心(代替在中心加入先前的組分)被加入。

您的JLabel正在取代JMenuBar,因爲它是在之後添加的。

你可以做這樣的事情:

Main.aboutWindow.add(menubar, BorderLayout.NORTH); 

或者作爲@ControlAltDel提到使用添加菜單欄對話框的默認方式:

Main.aboutWindow.setJMenuBar(menubar); 
+0

你能給我一個示例位置規範嗎? – sam4ritan

+0

您可以找到有關BorderLayout佈局的詳細信息[HERE](https://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html) – Titus

+0

謝謝,這將有助於 – sam4ritan