在actionperformed监听器中创建jpanel?

时间:2012-01-05 21:58:44

标签: java swing listener

我有1个JFrame和10个JPanel组件作为单独的类。在jframe上还有JMenuBar。单击一个菜单项时,我将删除jframe(removeAll)的contentPane的所有内容并添加我的一个jpanel。

这是我的代码;

// 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。当前代码首先创建所有jpanel。当我点击一个菜单项时,显示我之前创建的jpanel。

我认为可以使用Class.forName方法完成,但我无法理解。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您应该使用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;
}