2016-12-05 81 views
0
package database; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.SwingUtilities; 

public class Application { 
    public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JFrame frame = new ApplicationFrame("Application"); 
       frame.setSize(500, 400); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
      } 
     }); 

    } 

    public class ApplicationFrame extends JFrame { 

     private CompaniesPanel companiesPanel; 

     public ApplicationFrame(String title) { 
      super(title); 

      setLayout(new BorderLayout()); 

      JMenuBar menuBar = new MenuBar("Menu"); 

      Container container = getContentPane(); 
      container.add(menuBar, BorderLayout.NORTH); 

     } 
    } 

    public class MenuBar extends JMenuBar { 

     public MenuBar(String title) { 
      super(); 

      JMenu menuFile = new JMenu("File"); 
      add(menuFile); 

      JMenu menuOpen = new JMenu("Open"); 
      menuFile.add(menuOpen); 

      JMenuItem menuItemCompanies = new JMenuItem("Companies"); 
      menuOpen.add(menuItemCompanies); 

      menuItemCompanies.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        // In here I would like to take a CompaniesPanel and insert 
        // it into 
        // an ApplicationFrame if the Companies button is pressed on 
        // menu 
       } 

      }); 
     } 
    } 

    public class CompaniesPanel extends JPanel { 
     public CompaniesPanel() { 
      Dimension size = getPreferredSize(); 
      size.width = 250; 
      setPreferredSize(size); 

      setBorder(BorderFactory.createTitledBorder("Company Names")); 

      setLayout(new GridBagLayout()); 

      GridBagConstraints gridBagConstraints = new GridBagConstraints(); 

     } 
    } 
} 

我只想讓我的應用程序打開該菜單,剩下的就是空白,當從下拉菜單中按下公司時打開公司面板。這可能沒有打開另一個jFrame?如何使用ActionListener在JFrame內插入JPanel?

+0

是的。不知道它是否與你使用類的方式一致。我只會製作1個gui文件和1個啓動文件,啓動gui。那麼您可以輕鬆訪問gui類中的框架並向其添加新的jpanel – XtremeBaumer

+1

考慮一個CardLayout面板;它將其組件視爲一堆或「卡片」組合;當顯示一個時,其餘的部分隱藏在顯示的「下面」。您可以使用一張沒有任何內容的卡,然後在選擇正確的菜單選項時切換到您想要的任何一張。 – arcy

回答

1
container.add(menuBar, BorderLayout.NORTH); 

首先,並非如何將菜單添加到框架。一個框架有一個爲菜單欄保留的特殊區域。

相反,你只需使用:

setJMenuBar(menuBar); 

閱讀從How to Use Menus Swing的教程部分獲取更多信息和工作的例子。

正如已經提到的CardLayout將是一個不錯的選擇。通過添加兩個面板(一個爲空,另一個爲公司),佈局的首選尺寸將由您的公司面板確定,以便在顯示公司面板時框架尺寸不會更改。

Swing教程還提供了一個關於How so Use CardLayout的部分,其中包含一些工作示例以幫助您入門。

保留所有Swing基礎知識的Swing教程的參考。