У меня есть немного проблем с пониманием ActionListener, если я хочу отделить его реализацию от моего класса GUI, как бы я это сделал? Программа представляет собой простой калькулятор. Я пытаюсь думать о GUI-классе (Boundary), который имеет только кнопки, а затем отдельный класс (Control), который обрабатывает все actionevents (нажатия кнопок). Могу ли я сделать приватную переменную типа Control и заставить ее работать таким образом? Пожалуйста, помогите, если вы знаете, как :)Java, разделяющий GUI из класса ActionListener
управления Класс
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.*;
import java.awt.*;
public class Boundary extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel northPanel;
private JPanel southPanel;
private Control control;
public Boundary()
{
super("Calculator");
getContentPane().setLayout(new BorderLayout());
northPanel = new JPanel(); northPanel.setLayout(new BorderLayout());
southPanel = new JPanel(); southPanel.setLayout(new GridLayout(4,4));
control = new Control();
JTextField numberField = new JTextField(20);
JTextField operationField = new JTextField(1);
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
JButton button0 = new JButton("0");
JButton buttonequal = new JButton("=");
JButton buttonclear = new JButton("C");
JButton buttonplus = new JButton("+");
JButton buttonminus = new JButton("-");
JButton buttondivide = new JButton("/");
JButton buttonmultiply = new JButton("*");
button1.addActionListener(control);
button2.addActionListener(control);
button3.addActionListener(control);
button4.addActionListener(control);
button5.addActionListener(control);
button6.addActionListener(control);
button7.addActionListener(control);
button8.addActionListener(control);
button9.addActionListener(control);
button0.addActionListener(control);
buttonequal.addActionListener(control);
buttonclear.addActionListener(control);
buttonplus.addActionListener(control);
buttonminus.addActionListener(control);
buttondivide.addActionListener(control);
buttonmultiply.addActionListener(control);
northPanel.add(numberField, BorderLayout.CENTER);
northPanel.add(operationField, BorderLayout.EAST);
southPanel.add(button1);
southPanel.add(button2);
southPanel.add(button3);
southPanel.add(buttondivide);
southPanel.add(button4);
southPanel.add(button5);
southPanel.add(button6);
southPanel.add(buttonmultiply);
southPanel.add(button7);
southPanel.add(button8);
southPanel.add(button9);
southPanel.add(buttonminus);
southPanel.add(buttonclear);
southPanel.add(button0);
southPanel.add(buttonequal);
southPanel.add(buttonplus);
numberField.setVisible(true);
numberField.setEditable(false);
operationField.setVisible(true);
operationField.setEditable(false);
getContentPane().add(northPanel, BorderLayout.NORTH);
getContentPane().add(southPanel, BorderLayout.CENTER);
setLocation(300,300);
setSize(400,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
управления Класс
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class Control implements ActionListener {
private JButton button;
Control()
{
}
@Override
public void actionPerformed(ActionEvent arg0) {
}
}
1) Не используйте более чем одну пустую строку пробела в коде. 2) Посмотрите на 'Action' &' AbstractAction'. 3) Не расширяйте 'JFrame', просто используйте экземпляр. 4) Посмотрите этот код [простой пример] (http://stackoverflow.com/a/7441804/418556) для начала. –
Как указано, действие лучше, однако, оно должно работать так же, как представлено? –
D.R. Как я могу реализовать, что кнопка нажата через класс Control? Я застрял, что положить в действие? Andrew Thompson, его необходимо использовать и расширять JFrame. Я также проясню пустое пространство, спасибо за ваш ввод – Zac