4

私はすべて正しいことをしたようです。シンプルに実装する必要がありますJMenuBarが、機能していないようです。誰かがこれで私を助けてくれますか?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class swing {
   public static void main (String[] args) {
      JFrame frame = new JFrame ("menu");
      frame.setVisible (true);
      frame.setSize (400, 400);
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      JMenuBar bar = new JMenuBar ();
      frame.setJMenuBar (bar);
      bar.setVisible (true);
      JMenu file = new JMenu ("File");
      bar.add (file);
      JMenuItem open = new JMenuItem ("open");
      file.add(open);
   }
}
4

2 に答える 2

9

あなたがしているのは、最初にフレームを表示してから、メニューバーを追加することです。効果がないでしょう。逆にすればいい。frame.setVisible (true);最後に、または少なくともメニューバーを設定した後に行をシフトします。すべてのコンポーネントを追加した後は常にフレームを表示する必要があります。そうしないと、フレームを表示した後に追加されたコンポーネントrepaint()は、完了するまで表示されません。


@sjrのコメントから:

コンテナが表示された後にコンテナを変更する (コンポーネントの追加/削除/サイズ変更) として、revalidate( だけでなく) 必要になる場合もあります。repaint

于 2012-06-12T06:23:49.940 に答える
3

これを試してください、うまくいきます。

フレームへのコンポーネントの追加は で行われ、invisible stateすべてのコンポーネントが設定されると、フレームが表示されます。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class swing extends JFrame {
   public swing(){
      this.setSize(400,400);
      this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
      this.setComponent();
   }

   public void setComponent(){
      JMenuBar bar = new JMenuBar();
      JMenu menu = new JMenu("Menu");
      this.setJMenuBar(bar);
      bar.add(menu);
   }

   public static void main (String[] args) {
      EventQueue.invokeLater(new Runnable(){
         public void run(){
            swing s = new swing();
            s.setVisible(true);
         }
      });
   }
}
于 2012-06-12T06:44:47.813 に答える