2016-12-05 2 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(); 

     } 
    } 
} 

Я просто хочу, чтобы мое приложение открыло это меню, а остальное было пустым и откройте компанию CompaniesPanel, когда компании нажали в раскрывающемся меню. Возможно ли это, не открывая другой jFrame?Как вставить JPanel внутри JFrame с помощью ActionListener?

+0

Да. не уверен, работает ли он с использованием классов. я бы просто сделал 1 файл gui и 1 начальный файл, который запускает gui. то вы можете легко получить доступ к кадру внутри класса gui и добавить к нему новый jpanel – XtremeBaumer

+1

Рассмотрите панель CardLayout; он рассматривает свои компоненты как стек или колоду «карт»; когда один отображается, остальные из них скрыты «под» отображаемым. У вас может быть одна карта, в которой ничего не было, а затем переключитесь на то, что вам нужно, когда была выбрана правильная опция меню. – arcy

ответ

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

Флирт из всех, что вы не добавляете в рамку меню. Кадр имеет специальную область, зарезервированную для строки меню.

Вместо этого вы просто использовать:

setJMenuBar(menuBar); 

Прочитайте раздел из свинга учебника по How to Use Menus для получения дополнительной информации и рабочих примеров.

Как уже упоминалось, CardLayout будет хорошим выбором. Добавив две панели (одна пустая и одна для компаньонов), предпочтительный размер макета будет определяться панелью ваших компаний, чтобы размер кадра не изменился при отображении панели компаний.

В учебнике Swing также есть раздел на How so Use CardLayout с рабочими примерами, чтобы начать работу.

Содержите ссылку на учебник Swing, удобный для всех основ Swing.

Смежные вопросы