Итак, у меня есть класс, который расширяет JPanel
, и внутри конструктора я добавляю свой JButtons
и все, что мне нужно добавить. У меня также есть MainFrame
класс, который является контейнером (JFrame
) и этот класс будет принимать аргумент из класса под названием FrameSwitcher
(Controller), который будет оценивать, какие кнопки были нажаты, и передать эту информацию в 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");
}
}
Тогда мой 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' не в настоящее время реализовать .. так, чего вы ожидали? Вся эта конструкция завинчена. Вернуться к истокам. – mre
Внедрите ActionListener в свой класс FrameSwitcher и в своем классе MainMenu добавьте каждой кнопке ActionListener (FrameSwitcher). –