2011-12-08 13 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(); 

現在就點擊菜單上調用一些方法,會做一些事情是這樣的:你想展示在同一個JFrame的多個面板

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

這種方法的情況下,有幫助的。

+1

-1,應該使用container.revalidate()來告訴容器該組件已被移除/添加。不要玩可見度。 – camickr

+0

@camickr編輯它。 – gprathour

相關問題