2012-07-13 4 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); 
    } 
} 

그리고이 메인 클래스에서 호출하여 메뉴를 표시하려고합니다.

package base; 

import javax.swing.*; 

import java.awt.*; 
import base.SwingMenu; 

public class StickyNotes { 

    private static void createAndShowGUI() { 

     // Create and set up the window. 
     JFrame frame = new JFrame("Java Sticky Notes"); 

     frame.setPreferredSize(new Dimension(5000, 5000)); 
     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 mainBar = new SwingMenu(); 
     //frame.setJMenuBar(mainBar); 
     //frame.getContentPane().add(mainBar); 

     // 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() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

아침마다 알아낼 수 없습니다. 메뉴 막대를 Java Swing에 표시하려면 어떻게합니까?

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

당신은 두 가지 주요 방법은 호출 할을? – Zong

+0

모두 잘못하고 있습니다. 당신이해야 할 일은 클래스를 만드는 것입니다. 그 클래스는'JMenuBar'를 반환하는 메소드를 만듭니다. 다른 클래스에있는 프레임 객체에서 이것을'JMenuBar'로 설정하고, 단순히'frameObject.setMenuBar (swingMenu.getMenuBar()); ' –

+2

연습을 계속하십시오 (예, 오류 수정). 콩과 같은 부분을 개발하는 것이 좋습니다. –

답변

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

정말 고마워요 !! 자바를 배우면서 코드 분리법을 배워야하기 때문에 두 번째 예제에도 감사드립니다. 나는 이것과 함께 갈 것이고, 속지 않는 다른 주요 StickyNotes.java 클래스에서 모든것을 얻는다. – JoJo

+0

@JoJo : 당신은 가장 환영 받고 있습니다 .--) –

4

두 개의 서로 다른 JFrame을 생성하고 있습니다. JFrame 만든 후 :

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

를 메뉴 모음을 만들고에 할당 JFrame :

JMenuBar menubar = new JMenuBar(); 

// ... 

frame.setJMenuBar(menubar); 

필요가 없습니다에 대한 :

SwingMenu mainBar = new SwingMenu(); 
4

하면이 밖으로 시도 :

이를 기본적으로 SwingMenu을 캡슐화하는 데 도움이되는 마우 바를 만든다. 메뉴 막대의 ld. 당신의 createAndShowGUI()에서 지금

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); 
    } 
} 

, 그냥 양식을 작성하고 새로 만든 메뉴 표시 줄을 추가합니다.

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

답변에 동의합니다 –

관련 문제