Как отобразить меню и панель в одном окне в Java Swing? - PullRequest
3 голосов
/ 08 декабря 2011

У меня есть JMenu, и я хочу изменить содержимое окна в зависимости от того, какая кнопка из меню нажата. Мне удалось показать панель как всплывающее окно, но я хочу, чтобы она отображалась в том же окне с меню. Это мой код:

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);

          }
       }
 }

Ответы [ 4 ]

5 голосов
/ 08 декабря 2011

Я бы попытался заполнить все окно CardLayout.CardLayout предназначен для переключения его содержимого между отдельными представлениями.Просто установите несколько карт для каждой панели, которую вы хотите показать, и переключите меню между ними.

1 голос
/ 08 декабря 2011

Построение Guis немного сложное, но стоит потраченного времени, чтобы понять, какие есть варианты. Это хорошее место для начала, так как оно объясняет различные макеты Java-интерфейса, в том числе с помощью менеджера макетов. http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html.

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

1 голос
/ 08 декабря 2011

Если вы используете окна или диалоги, вам придется иметь дело с фокусом, закрытием, минимизацией, максимизацией, изменением размера, центрированием, видимостью ... В вашем случае я бы порекомендовал вам выбрать хороший макет, соответствующий вашим потребностям (возможно, самый простой способ достижения вашей цели).

Что вы думаете о панелях с вкладками? Смотрите эту ссылку: http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

0 голосов
/ 08 декабря 2011

Это достаточно просто.Я реализовал эту вещь следующим образом:

Сначала получите панель содержимого вашего JFrame, скажем, в контейнере.Сделайте этот контейнерный объект статическим.

private static Container container;

теперь получите панель содержимого.

container = this.getContentPane();

Теперь при щелчке по меню вызовите некоторый метод, который будет делать что-то вроде этого:*

Этот метод полезен, если вы хотите показать несколько панелей в одном JFrame.

...