2017-11-04 13 views
0

初心者の質問のビットですが、このJMenuバーを分割ペインの上に表示することに苦労しています。誰かが私を助けて、私が間違っていたことを説明できますか?私の理解には、JMenuとドロップダウンメニューを追加しました。JMenuバーがGUIに表示されない

問題の解決方法を教えていただきありがとうございます。

次は私のコードです:

public class JavaAssignmentPanel { 

    JMenuBar setupMenu() { 

     JMenuBar menuBar = new JMenuBar(); //menubar 
     JMenu menu1 = new JMenu("Menu"); //menu 
     menuBar.add(menu1); //add menu to gui 
     JMenuItem menuItem1 = new JMenuItem("Item 1", KeyEvent.VK_1); //create drop down menu 
     menu1.add(menuItem1); //adds drop down menu to gui 

     //execute code when selected 
     menuItem1.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 

       // panel.showText("Example1 text - normally read from file"); 
      } 
     }); 

     return menuBar; 
    } 

    public static void main(String[] args) throws FileNotFoundException { 

     window window = new window(); 

    } 

    private static class window extends JFrame { 

     public window() throws FileNotFoundException { 

      JPanel leftScrollPane = new JPanel(); 
      JPanel rightPane = new JPanel(); 
      JSplitPane splitPane; 

      this.setVisible(true); 
      this.setSize(400, 400); 
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      splitPane = new JSplitPane(); 
      splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); 
      splitPane.setDividerSize(10); 
      splitPane.setDividerLocation(100); 
      splitPane.setLeftComponent(leftScrollPane); 
      splitPane.setRightComponent(rightPane); 
      splitPane.setOneTouchExpandable(true); 
      splitPane.setDividerLocation(200); 

      Dimension minimumSize = new Dimension(100, 50); 

      leftScrollPane.setSize(400, 400); 

      splitPane.setPreferredSize(new Dimension(400, 200)); 
      splitPane.setLeftComponent(leftScrollPane); 
      splitPane.setRightComponent(rightPane); 
      this.add(splitPane); 

     } 
    } 

} 
+1

メニューバーをウィンドウに追加することはありません。私はあなたが 'setupMenu()'をどこでも呼び出すのを見ません。 – cello

+0

JMenuBar setupMenu(){は、私が提供したコードの最初の行です。 –

+0

しかし、これはメソッド定義のみです。 – cello

答えて

0

私はあなたのコードの中に見て、次のように変更作ら:

setupMenu()に修飾子を追加しました

public static JMenuBar setupMenu() { ... } 

あなたJFramesのコンストラクタでthis.setJMenuBar(setupMenu());

を呼び出すことにより、JFrameのにあなたのメニューバーを追加しました。私はまた、変更を確認するために1280×720までのJFrameのサイズを増加させました。

Thisは、すべての変更を加えたクラスです。

キャメルケースにあるJava Code Conventions(大文字(Uppper Camel Case)から始まる)に従ってクラス名を指定することをお勧めします。これにより、コードを読みやすくなります。

+0

ページを更新していないので、これまで表示されていませんでしたが、実際はsplitpaneも表示されています。どうもありがとうございました。 Javaを学ぶときに私のコードなどを読むのが難しいと判断した場合、Java Code Conventionsのリンクを私の主な問題の1つとしてチェックしてください。 –

1

だから私はちょうど完全に盲目であるかもしれないが、私はあなたがクラスでどこか他のあなたのsetupMenuメソッドを呼び出して見ることができません。あなたは、jframeにメニューバーを追加するプログラムを伝える必要があります。

+0

setupMenuは、コードの最初の行です。 –

+0

@DanielSiwiecええ、私はそれを参照してください、しかしあなたはちょうど方法を作った。あなたは実際にこのメソッドを呼び出したことはありません。 –

+0

あなたが何について話しているのか分からないなら、オブジェクト指向のJavaについて少し調べてみてください。 –

1

JFrameJMenuBarを設定する必要があります。

コードを参照してください、あなたはsetupMenu方法は、静的作ると、このようなウィンドウクラスでそれを呼び出すことによってそれを行うことができます。

this.setJMenuBar(setupMenu()); 

コード:

public class JavaAssignmentPanel { 

// making this method as static 
static JMenuBar setupMenu() { 

    JMenuBar menuBar = new JMenuBar(); // menubar 
    JMenu menu1 = new JMenu("Menu"); // menu 
    menuBar.add(menu1); // add menu to gui 
    JMenuItem menuItem1 = new JMenuItem("Item 1", KeyEvent.VK_1); // create 
                    // drop 
                    // down 
                    // menu 
    menu1.add(menuItem1); // adds drop down menu to gui 

    // execute code when selected 
    menuItem1.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 

      // panel.showText("Example1 text - normally read from file"); 
     } 
    }); 

    return menuBar; 
} 

public static void main(String[] args) throws FileNotFoundException { 

    window window = new window(); 

} 

private static class window extends JFrame { 

    public window() throws FileNotFoundException { 

     JPanel leftScrollPane = new JPanel(); 
     JPanel rightPane = new JPanel(); 
     JSplitPane splitPane; 

     this.setVisible(true); 
     this.setSize(400, 400); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // calling setupMenu method to set the JMenuBar in JFrame 
     this.setJMenuBar(setupMenu()); 

     splitPane = new JSplitPane(); 
     splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); 
     splitPane.setDividerSize(10); 
     splitPane.setDividerLocation(100); 
     splitPane.setLeftComponent(leftScrollPane); 
     splitPane.setRightComponent(rightPane); 
     splitPane.setOneTouchExpandable(true); 
     splitPane.setDividerLocation(200); 

     Dimension minimumSize = new Dimension(100, 50); 

     leftScrollPane.setSize(400, 400); 

     splitPane.setPreferredSize(new Dimension(400, 200)); 
     splitPane.setLeftComponent(leftScrollPane); 
     splitPane.setRightComponent(rightPane); 
     this.add(splitPane); 

    } 
}} 
+0

これらのソリューションはどちらもJMenuを最終的に表示しますが、JMenuが現在動作しているときにはsplitPaneがGUIに表示されなくなります。 –

+0

私はそれを得て、ちょうど 'this.setVisible(true);'をウィンドウコンストラクタの最後に書きます。それ以外の場所ではなく、作業を開始します。それは私の側でちょっとした微調整だけで作業しています。 –

1

あなたは、メソッドを定義しsetupMenu()JMenuBarを返します。メニューバーをウィンドウに追加する必要があります。

は、this.add(splitPane);後(つまり、あなたのwindow()コンストラクタの最後のコマンドとして

this.setJMenuBar(setupMenu()); 

を持つことによって固定することができ

+0

これらのソリューションはどちらもJMenuを最終的に表示しますが、JMenuが現在動作しているときにはsplitPaneがGUIに表示されなくなります。 –

+0

'this.add(splitPane)'の代わりに 'this.setContentPane(splitPane)'を試してください。 – cello

+0

まだ運がないと、splitPaneが表示されません。分割された枠を取り除き、2つのJPanelを使用するだけで良い選択肢になるかどうかはわかりません。私が基本的にそれを長期的に行うために基本的に必要とするのは、特定の値でファイルを読み込むときです。左側のパネルはファイルのテキストを表示し、右側のパネルはグラフを表示する必要があります。 –

関連する問題