2012-07-13 136 views
4

我有以下SwingMenu類。 包裝底座;如何從另一個類Java Swing調用一個方法?

import javax.swing.*; 

public class SwingMenu { 
    public static void main(String[] args) { 
     SwingMenu s = new SwingMenu(); 
    } 

    public SwingMenu() { 
     JFrame frame = new JFrame(
       "Creating a JMenuBar, JMenu, JMenuItem and seprator Component"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JMenuBar menubar = new JMenuBar(); 
     JMenu filemenu = new JMenu("File"); 
     filemenu.add(new JSeparator()); 
     JMenu editmenu = new JMenu("Edit"); 
     editmenu.add(new JSeparator()); 
     JMenuItem fileItem1 = new JMenuItem("New"); 
     JMenuItem fileItem2 = new JMenuItem("Open"); 
     JMenuItem fileItem3 = new JMenuItem("Close"); 
     fileItem3.add(new JSeparator()); 
     JMenuItem fileItem4 = new JMenuItem("Save"); 
     JMenuItem editItem1 = new JMenuItem("Cut"); 
     JMenuItem editItem2 = new JMenuItem("Copy"); 
     editItem2.add(new JSeparator()); 
     JMenuItem editItem3 = new JMenuItem("Paste"); 
     JMenuItem editItem4 = new JMenuItem("Insert"); 
     filemenu.add(fileItem1); 
     filemenu.add(fileItem2); 
     filemenu.add(fileItem3); 
     filemenu.add(fileItem4); 
     editmenu.add(editItem1); 
     editmenu.add(editItem2); 
     editmenu.add(editItem3); 
     editmenu.add(editItem4); 
     menubar.add(filemenu); 
     menubar.add(editmenu); 
     frame.setJMenuBar(menubar); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
    } 
} 

我想通過從這個主類調用它來顯示菜單。

​​

我只是無法弄清楚整天早上:)如何讓菜單欄顯示在Java Swing中?

// Add Main Menu 
    SwingMenu mainBar = new SwingMenu(); 
+0

你要調用2種不同的主要方法? – Zong 2012-07-13 17:07:01

+0

你這樣做是錯的。你應該做的是創建一個類,在該類中創建一個方法,該方法返回一個'JMenuBar',現在將其設置爲位於另一個類中的框架對象的'JMenuBar',只需使用'frameObject.setMenuBar swingMenu.getMenuBar());' – 2012-07-13 17:07:52

+2

保持這種做法(是的,糾正錯誤)。像豆一樣開發部件是一種非常好的做法 – 2012-07-13 17:26:24

回答

4

檢查這個修改後的代碼示例:

import javax.swing.*; 

import java.awt.*; 

public class StickyNotes { 

    private JMenuBar getMenuBar() 
    { 
     JMenuBar menubar = new JMenuBar(); 
     JMenu filemenu = new JMenu("File"); 
     filemenu.add(new JSeparator()); 
     JMenu editmenu = new JMenu("Edit"); 
     editmenu.add(new JSeparator()); 
     JMenuItem fileItem1 = new JMenuItem("New"); 
     JMenuItem fileItem2 = new JMenuItem("Open"); 
     JMenuItem fileItem3 = new JMenuItem("Close"); 
     fileItem3.add(new JSeparator()); 
     JMenuItem fileItem4 = new JMenuItem("Save"); 
     JMenuItem editItem1 = new JMenuItem("Cut"); 
     JMenuItem editItem2 = new JMenuItem("Copy"); 
     editItem2.add(new JSeparator()); 
     JMenuItem editItem3 = new JMenuItem("Paste"); 
     JMenuItem editItem4 = new JMenuItem("Insert"); 
     filemenu.add(fileItem1); 
     filemenu.add(fileItem2); 
     filemenu.add(fileItem3); 
     filemenu.add(fileItem4); 
     editmenu.add(editItem1); 
     editmenu.add(editItem2); 
     editmenu.add(editItem3); 
     editmenu.add(editItem4); 
     menubar.add(filemenu); 
     menubar.add(editmenu); 

     return menubar; 
    } 

    private void createAndShowGUI() { 

     // Create and set up the window. 
     JFrame frame = new JFrame("Java Sticky Notes"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout(FlowLayout.LEFT)); 

     // Add Label 
     JLabel label = new JLabel("Type Below"); 
     frame.getContentPane().add(label); 

     // Add Main Menu 
     frame.setJMenuBar(getMenuBar()); 

     // Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public Container createContentPane() { 
     // Create the content-pane-to-be. 
     JPanel jplContentPane = new JPanel(new BorderLayout()); 
     jplContentPane.setLayout(new BorderLayout()); 
     jplContentPane.setOpaque(true); 
     return jplContentPane; 
    } 

    public static void main(String[] args) { 
     // creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new StickyNotes().createAndShowGUI(); 
      } 
     }); 
    } 
} 

或者,您可以修改代碼有點像這樣,如果你真的想保持JMenuBar在不同的類,設置在這裏你可以簡單地使SwingMenu Class的對象,並通過使這個類的一個對象調用方法getMenuBar()

import javax.swing.*; 

import java.awt.*; 

public class StickyNotes { 

    private void createAndShowGUI() { 

     // Create and set up the window. 
     JFrame frame = new JFrame("Java Sticky Notes"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout(FlowLayout.LEFT)); 

     // Add Label 
     JLabel label = new JLabel("Type Below"); 
     frame.getContentPane().add(label); 

     // Add Main Menu 
     SwingMenu swingMenu = new SwingMenu(); 
     frame.setJMenuBar(swingMenu.getMenuBar()); 

     // Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public Container createContentPane() { 
     // Create the content-pane-to-be. 
     JPanel jplContentPane = new JPanel(new BorderLayout()); 
     jplContentPane.setLayout(new BorderLayout()); 
     jplContentPane.setOpaque(true); 
     return jplContentPane; 
    } 

    public static void main(String[] args) { 
     // creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new StickyNotes().createAndShowGUI(); 
      } 
     }); 
    } 
} 

class SwingMenu { 

    public JMenuBar getMenuBar() 
    { 
     JMenuBar menubar = new JMenuBar(); 
     JMenu filemenu = new JMenu("File"); 
     filemenu.add(new JSeparator()); 
     JMenu editmenu = new JMenu("Edit"); 
     editmenu.add(new JSeparator()); 
     JMenuItem fileItem1 = new JMenuItem("New"); 
     JMenuItem fileItem2 = new JMenuItem("Open"); 
     JMenuItem fileItem3 = new JMenuItem("Close"); 
     fileItem3.add(new JSeparator()); 
     JMenuItem fileItem4 = new JMenuItem("Save"); 
     JMenuItem editItem1 = new JMenuItem("Cut"); 
     JMenuItem editItem2 = new JMenuItem("Copy"); 
     editItem2.add(new JSeparator()); 
     JMenuItem editItem3 = new JMenuItem("Paste"); 
     JMenuItem editItem4 = new JMenuItem("Insert"); 
     filemenu.add(fileItem1); 
     filemenu.add(fileItem2); 
     filemenu.add(fileItem3); 
     filemenu.add(fileItem4); 
     editmenu.add(editItem1); 
     editmenu.add(editItem2); 
     editmenu.add(editItem3); 
     editmenu.add(editItem4); 
     menubar.add(filemenu); 
     menubar.add(editmenu); 

     return menubar; 
    } 
} 
+0

非常感謝你!我也很感激你的第二個例子,因爲在學習Java時我需要學習代碼分離。我打算繼續這樣做,並將finsh從不屬於的主要StickyNotes.java類中取出所有其他內容。 – JoJo 2012-07-13 17:30:03

+0

@JoJo:你最歡迎並保持微笑:-) – 2012-07-13 17:33:46

4

您正在創建2個不同的JFrame s。創建JFrame後:

JFrame frame = new JFrame("Java Sticky Notes"); 

創建菜單欄,並將其分配給JFrame

JMenuBar menubar = new JMenuBar(); 

// ... 

frame.setJMenuBar(menubar); 

無需:

SwingMenu mainBar = new SwingMenu(); 
4

嘗試了這一點:

這基本上使SwingMenu一個manu酒吧,這將有助於封裝bui菜單欄的ld。

public class SwingMenu extends JMenuBar{ 
    public SwingMenu() { 
     JMenu filemenu = new JMenu("File"); 
     JMenu editmenu = new JMenu("Edit"); 

     // Build your file menu and edit menu here... 

     add(filemenu); 
     add(editmenu); 
    } 
} 

現在,在createAndShowGUI()剛纔創建的表單和新創建的菜單欄添加到它。

private static void createAndShowGUI() { 
    // Create and set up the window. 
    JFrame frame = new JFrame("Java Sticky Notes"); 
    // other stuff... 
    // Add Main Menu 
    SwingMenu mainBar = new SwingMenu(); 
    frame.setJMenuBar(mainBar); 
    // Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
} 
+0

我同意你的回答 – 2012-07-13 17:24:20

相關問題