【发布时间】:2016-04-15 03:56:55
【问题描述】:
我有一个 JFrame 在一侧分成两部分 我有一个 JPanel,上面有一些 JToggleButtons。在另一边,当单击其中一个 JToggleButtons 时,我需要显示正确的 JPanel。目前只使用一个线程来执行此操作。
这里是 JFrame
public class AppFrame extends JFrame{
private JPanel content ;
private JPanel menu;
public AppFrame() {
super("Title");
setLayout(BorderLayout());
//content is gonna hold JPanel1 or JPanel2
content = new JPanel();
menu = new menu();
this.add(menu, BorderLayout.WEST);
this.add(content , BorderLayout.CENTER);
}
public void setContet(JPanel activePanel){
content = activePanel;
this.add(content , BorderLayout.CENTER);
}
}
这里是持有 JToggleButtons (MenuJPanel) 的 JPanel
public class MenuJPanel extends JPanel{
private final LayoutManager innerLayout = new GridLayout(3,1,1,1);
private final JToggleButton button1;
private final JToggleButton button1;
public MenuPanel() {
super();
SwitchHandler sHandler = new SwitchHandler();
this.setLayout(innerLayout);
this.add(button1);
this.add(button2);
button1.addActionListener(sHandler);
button2.addActionListener(sHandler);
}
class SwitchHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button1){
button2.setSelected(false);
//at this point I want the frame to display JPanel1
//I tried this
AppFrame frame = (AppFrame)getTopLevelAncestor();
frame.setContet(new JPanel1());
} else {
button1.setSelected(false);
//at this point I want the frame to display JPanel2
//I tried this
AppFrame frame = (AppFrame)getTopLevelAncestor();
frame.setContet(new JPanel2());
}
}
}
有人可以告诉我如何在触发事件时在框架中打开这些面板。 谢谢
【问题讨论】:
-
我很难找到有关如何执行此操作的参考。谢谢
标签: java swing events event-handling