我有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方法完成,但我无法理解。有什么帮助吗?
答案 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;
}