1

私は Java を学んでおり、別のクラスからフレームにメニュー バーを追加しようとしています (プログラムをより適切に編成するために、コードを複数のクラスに分割する練習をしています)。

これが私のコードのサンプルです:

public class MainApp {

public static void main(String[] args) {
    // Create window
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(600, 400);

    // Create main panel
    JPanel content = new JPanel();
    content.setLayout(new BorderLayout());
    frame.add(content);

    //Create menu bar
    menubar menu = new menubar();
    content.add(menu.menuBar(), BorderLayout.NORTH);
            //Other stuff...

} // Ends main method
} // Ends MainApp class

そしてメニューバークラス:

public class menubar {
public static void menuBar(){
    JMenuBar menu = new JMenuBar();
    JMenu file = new JMenu("File");
        JMenuItem clear = new JMenuItem("New");
        JMenuItem exit = new JMenuItem("Exit");
    JMenu help = new JMenu("Help");
        JMenuItem about = new JMenuItem("About");
        JMenuItem instructions = new JMenuItem("Instructions");
} // Ends method menuBar
} // Ends class menubar

私は日食を使用し、次の行で:

content.add(menu.menuBar(), BorderLayout.NORTH);

「追加」に下線が引かれているため、コードをコンパイルできません。

私はこれを解決する方法を探していましたが、私が知る限り、これはうまくいくはずです。

どんな助けでも大歓迎です。

ありがとうございました

ジョシュ

4

4 に答える 4

1

メソッドmenuBarにはvoid戻り値の型があるため、addメソッドには適用できません。だからあなたは必要になるでしょう

content.add(menubar.menuBar(), BorderLayout.NORTH);

メソッドmenuから戻るときmenuBar

Aside:setJMenuBarを a に設定するJMenuBarために使用されJFrameます。

frame.setJMenuBar(menu.menuBar());
于 2013-09-21T16:16:43.673 に答える
1

それ以外の:

content.add(menu.menuBar(), BorderLayout.NORTH);

私はあなたがこれを意味すると思います:

content.add(menubar.menuBar(), BorderLayout.NORTH);

...しかし、このメソッドの戻り値の型はvoid. である必要がありますJMenuBar

于 2013-09-21T16:18:21.357 に答える
1

私はあなたを思う:

  • 関数のnew menubar()場合menubar.menubar()は作成したくないstatic
  • public static JMenuBar menubar() { ... }無効ではなく、欲しい
  • そうでなけれmenubar.menubar()return menu、その方法は高価なノーオペレーションでした

content.add(menu.menuBar(), ...)voidメソッドを別のメソッドの引数として使用できないため、下線が引かれています。

また、インスタンスではなく、クラスを使用して静的フィールドまたはメソッドを常に参照する必要があります。また、クラス名は大文字 ( Menu) で始める必要があります。

于 2013-09-21T16:20:09.543 に答える