【发布时间】:2013-03-08 17:52:12
【问题描述】:
所以我有一个扩展 JPanel 的类,并在构造函数中添加我的 JButtons 以及我需要添加的任何其他内容。我还有一个MainFrame 类,它是容器(JFrame),这个类将从一个名为FrameSwitcher(控制器)的类中获取一个参数,该类将评估点击了哪些按钮,并将信息传递给@987654326 @
我在执行此操作时遇到了麻烦,我找不到合适的方法来执行此操作。我也希望保持 JButtons 的私有和非静态。
JPanel 示例:
public class MainMenu() {
private JButton btnSinglePlayer, btnMultiPlayer;
public MainMenu() {
setLayout(null);
btnSinglePlayer = new JButton("singlePlayer");
btnSinglePlayer.setBounds(320, 25, 275, 130);
add(btnSinglePlayer);
btnMultiPlayer = new JButton("MultiPlayer");
btnMultiPlayer.setBounds(320, 170 , 275, 130);
add(btnMultiPlayer);
}
}
帧切换器:
public class FrameSwitcher implements panelListener { // panelListener is an interface defined else where.
public FrameSwitcher(MainFrame frame) {
// This is irrelevant to the question.
}
@Override
public void gamePanel() {
System.out.println("GamePanel Event: Recieved");
}
@Override
public void mainMenu() {
System.out.println("mainMenu Event: Recieved");
}
@Override
public void scoreBoardPanel() {
System.out.println("scoreBoardPanel Event: Recieved");
}
}
然后是我的 MainFrame:
public class MainFrame extends JFrame implements ActionListener {
private PanelListener panelListener;
private JFrame mainContainer = new JFrame("Game");
private JPanel mainMenu = new MainMenu();
public void start() {
mainContainer(mainMenu);
}
public MainFrame(JPanel frame) {
mainContainer.getContentPane().add(frame);
mainContainer.pack();
// Other methods to initialize the frame
return mainContainer;
}
public void switchFrames(PanelListener panelListener) {
this.panelListener = panelListener; // PanelListener is an interface.
}
public void actionPerformed(ActionEvent e) {
JButton source = (JButton)e.getsource();
if(source == MainMenu.btnSinglePlayer) {
if(panelListener != null) {
System.out.println("Recieved the event approriately.");
}
}
}
}
在这个例子中,它确实编译了,但没有做它应该做的事情。另一件事是我目前将 JButtons 作为公共和静态的,我不希望这样。
【问题讨论】:
-
actionPerformed是ActionListener接口的一个方法,您的MainFrame类目前还没有实现它..那么,您期望什么?这整个设计很古怪。回到基础。 -
在 FrameSwitcher 类中实现 ActionListener,并在 MainMenu 类中为每个按钮添加一个 ActionListener(FrameSwitcher)。
标签: java swing model-view-controller jbutton observer-pattern