Создать jpanel в actionperformed слушателя? - PullRequest
1 голос
/ 06 января 2012

У меня есть 1 JFrame и 10 JPanel компонентов в качестве отдельных классов. На jframe также есть JMenuBar. Когда щелкнул пункт меню, я удаляю все содержимое contentPane из jframe (removeAll) и добавляю один из моих jpanels.

Вот мой код;

// this function changes panel
public static void SwitchPanel(Component comp)
{
    Container panel = getContentPane();
    panel.removeAll();

    panel.add(comp);
    panel.revalidate();
    panel.repaint();
}

// this function defines menu items and their listeners
public JMenuItem AddMenuItem(JMenu menu, String name, final JPanel toPanel) {
    JMenuItem menuItem = new JMenuItem(name);
    menu.add(menuItem);

    menuItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            SwitchPanel(toPanel);
        }
    });

    return menuItem;
}

и я добавляю такие пункты меню;

AddMenuItem(menu1, "some menu item", new MyPersonalJPanel());

Все работает. НО я хочу создать новую jpanel, когда щелкнул соответствующий пункт меню. Я имею в виду создать jpanel, если только это необходимо. Текущий код сначала создает все jpanels. Когда я щелкнул пункт меню, показывает мне jpanel, созданный ранее.

Я думаю, что это можно сделать с помощью метода Class.forName, но я не мог понять это. Любая помощь?

1 Ответ

1 голос
/ 06 января 2012

Вы должны сделать new MyPersonalJPanel() в методе public void actionPerformed(ActionEvent e).Таким образом, панель будет создаваться каждый раз, когда пользователь нажимает на меню.

Ваш код будет:

// this function defines menu items and their listeners
public JMenuItem AddMenuItem(JMenu menu, String name) {
    JMenuItem menuItem = new JMenuItem(name);
    menu.add(menuItem);

    menuItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            SwitchPanel(new MyPersonalJPanel());
        }
    });

    return menuItem;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...