1
我有1個JFrame和10個JPanel組件作爲單獨的類。 jframe上也有JMenuBar。當一個菜單項被點擊時,我刪除jframe的所有contentPane(removeAll)並添加一個我的jpanel。在actionperformed偵聽器中創建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方法完成,但我無法弄清楚。任何幫助?
MyPersonalJPanel是每個菜單項不同。我是否必須爲每個菜單項編寫單獨的監聽器?我試圖避免這種情況。 – 2012-01-05 22:24:56
您也可以將面板的類>對象作爲AddMenuItem參數傳遞,然後執行Class.newInstance()。然而,它通常會被認爲是不安全的:如果構造函數改變它將編譯,但在運行時失敗。我寧願將ActionListener實例作爲參數傳遞給AddMenuItem方法。 – Guillaume 2012-01-05 22:28:54
我認爲通過構造函數而不是類,但仍然很費力的很少。我會通過聽衆,謝謝你的幫助。 – 2012-01-05 22:56:52