2011-12-08 28 views
3

私はJMenuを持っており、メニューのどのボタンが押されたかに応じてウィンドウの内容を変更したいと思います。私はパネルをポップアップとして表示することができましたが、メニューと同じウィンドウに表示させたいのです。これまでのコードです:メニューとパネルをJava Swingの同じウィンドウに表示するにはどうすればいいですか?

public class GUImenu extends JFrame 


{ 
     private JMenuBar menuBar; 
     private JMenu menu;   
     private JMenu subMenu;  
     private JMenuItem item1; 
     private JMenuItem item2; 
     private JMenuItem item3; 
     private JMenuItem item4; 
     private JMenuItem item5; 
     private JMenuItem item6; 

     public GUImenu() 
     { 
      super("Example Menu System");// Call the JFrame constructor. 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Specify an action for the close button. 
      buildMenuBar(); 

      // Pack and display the window. 
      pack(); 
      setSize(1000, 250); // set frame size 
      setVisible(true); 
     } 

     private void buildMenuBar() 
     { 
      // Create the menu bar. 
      menuBar = new JMenuBar(); 

      // Create the file and text menus. 
      menu = new JMenu("Menu"); menuBar.add(menu); 
      subMenu = new JMenu("Create Customer"); 
      item1 = new JMenuItem("Ordinary Customer"); subMenu.add(item1); 
      item1.addActionListener(new showOrdinaryCust()); 
      item6 = new JMenuItem("Privileged Customer"); subMenu.add(item6); 

      menu.add(subMenu); 
      item2 = new JMenuItem("View Customers Who Didn't Pay"); menu.add(item2); 
      item3 = new JMenuItem("Remove Client");menu.add(item3); 
      item4 = new JMenuItem("Create Order"); menu.add(item4); 
      item5 = new JMenuItem("Search..."); menu.add(item5); 
      setJMenuBar(menuBar); 

     } 

     public static void main(String[] args) 
     { 
      new GUImenu(); 
     } 
     private class showOrdinaryCust implements ActionListener 
     { 
      public void actionPerformed(ActionEvent event) 
      { 
       if(event.getSource()==item1) 
        GUIpanel.main(null); 

      } 
     } 
} 

答えて

5

私はCardLayoutでウィンドウ全体を埋もうとします。 CardLayoutは、別々のビュー間で内容を切り替えることを意図しています。表示したいパネルごとに複数のカードを設定し、それらの間でメニューを切り替えるだけです。

+0

+1、適切なレイアウトマネージャが必要です。 – mre

1

窓やダイアログを使用する場合、後者はフォーカス、閉じる、最小化、最大化、サイズ変更、センタリング、視認性に対処する必要があります。 あなたの場合は、私はあなたに良いレイアウトを選ぶことをお勧めしますあなたのニーズに合うように(おそらくあなたの目標を達成するための最も簡単な方法)。

タブ付きペインについてどう思いますか?それは十分に単純であるhttp://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

0

: このリンクを参照してください。次のように私はこの事を実現しています

まず、あなたのJFrameのコンテンツペインを取得し、容器に言います。このコンテナオブジェクトを静的にします。

private static Container container; 

がコンテンツペインを取得できるようになりました。

container = this.getContentPane(); 

今メニューをクリックで次のようにいくつかのことを行いますいくつかのメソッドを呼び出します。

container.removeAll(); 
container.add(new JPanel()); //Add object of your panel you want to show. 
container.revalidate(); 

このメソッドは、同じJFrameの中に複数のパネルを表示したい場合に役立ちます。

+1

-1、container.revalidate()は、コンポーネントが削除/追加されたことをコンテナに伝えるために使用する必要があります。見えないように遊んではいけません。 – camickr

+0

@camickrが編集しました。 – gprathour

1

建物のGUIは少し複雑ですが、時間の価値はオプションが何であるかを理解するために費やしました。これは、レイアウトマネージャを使用するなど、さまざまなJava GUIレイアウトについて説明するので、始めるのに適しています。 http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html。今後の記事については

我々はコピーして貼り付けコード、コンパイルして見ることができるので、あなたの例では、輸入品を含め、完全でなければなりません。

関連する問題