所以我有一個課程擴展了JPanel
,並在構造函數中添加了我的JButtons
以及任何需要添加的內容。我也有一個MainFrame
類是容器(JFrame
)和這個類將需要一個參數從一個叫FrameSwitcher
(控制器),後者將評估點擊了哪些按鈕,並將信息傳遞給MainFrame
如何觀察不同類別的JButton?
我班有麻煩這樣做,我找不到一個合適的方式來做到這一點。我也希望保持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);
}
}
FrameSwitcher:
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");
}
}
然後我大型機:
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'類目前沒有實現的方法..所以,你期望什麼?整個設計都很棘手。回到基礎。 – mre 2013-03-19 20:39:36
在您的FrameSwitcher類中實現ActionListener,並在您的MainMenu類中爲每個按鈕添加一個ActionListener(FrameSwitcher)。 – 2013-03-19 20:42:05