我是java swing的新手所以决定创建一个基本的计算器我使用了两个侦听器,实际上是接口,第一个接口用于侦听数字(0-9),第二个接口用于监听运算符( - ,+,/);
我遇到的问题是我使用了两个不同的界面来听取按钮,这意味着操作员按钮不起作用;
第一个接口(digitListener)
package calculator;
public interface DigitListener {
public void StringEmmiter(String text1);
}
第二个接口(OperatorListener) 包计算器;
public interface MathOperatorListener {
public void OperatorEmitter(String text2);
}
ButtonTemplate是一个类,用于设置按钮的外观,用于阻止我在FormPanel中的代码非常长
package calculator;
import java.awt.Dimension;
import javax.swing.JButton;
public class ButtonTemplate extends JButton{
private String nameOfTheButton;
public ButtonTemplate(String nameOfButton){
this.nameOfTheButton = nameOfButton;
this.setText(nameOfTheButton);
this.setPreferredSize(new Dimension(70,50));
}
}
Formpanel是这里的实际计算器//问题
package calculator;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class FormArea extends JPanel implements ActionListener{
private ButtonTemplate No1;
private ButtonTemplate No2;
private ButtonTemplate No3;
private ButtonTemplate No4;
private ButtonTemplate No5;
private ButtonTemplate No6;
private ButtonTemplate No7;
private ButtonTemplate No8;
private ButtonTemplate No9;
private ButtonTemplate No0;
private ButtonTemplate addition;
private ButtonTemplate substraction;
private ButtonTemplate division;
private ButtonTemplate total;
private ButtonTemplate multiplication;
private JButton clearButton;
private DigitListener digitListener;
private MathOperatorListener operatorListener;
public FormArea(){
//SetSize
setPreferredSize(new Dimension(300,500));
//Create all Objects
No1 = new ButtonTemplate("1");
No2 = new ButtonTemplate("2");
No3 = new ButtonTemplate("3");
No4 = new ButtonTemplate("4");
No5 = new ButtonTemplate("5");
No6 = new ButtonTemplate("6");
No7 = new ButtonTemplate("7");
No8 = new ButtonTemplate("8");
No9 = new ButtonTemplate("9");
No0 = new ButtonTemplate("0");
addition = new ButtonTemplate("+");
substraction = new ButtonTemplate("-");
division = new ButtonTemplate("/");
total = new ButtonTemplate("=");
multiplication = new ButtonTemplate("x");
clearButton = new JButton("CLEAR");
clearButton.setPreferredSize(new Dimension(100,60));
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
//Layout
//Column 1
gc.gridx = 0;
gc.gridy = 0;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No1,gc);
gc.gridx = 0;
gc.gridy = 1;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No4,gc);
gc.gridx = 0;
gc.gridy = 2;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No7,gc);
//Column 2
gc.gridx = 1;
gc.gridy = 0;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No2,gc);
gc.gridx = 1;
gc.gridy = 1;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No5,gc);
gc.gridx = 1;
gc.gridy = 2;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No8,gc);
//Column3
gc.gridx = 2;
gc.gridy = 0;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No3,gc);
gc.gridx = 2;
gc.gridy = 1;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No6,gc);
gc.gridx = 2;
gc.gridy = 2;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No9,gc);
//Operators
gc.gridx = 0;
gc.gridy = 3;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(addition,gc);
gc.gridx = 1;
gc.gridy = 3;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(No0,gc);
gc.gridx = 2;
gc.gridy = 3;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(substraction,gc);
//Operator 2
gc.gridx = 0;
gc.gridy = 4;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(division,gc);
gc.gridx = 1;
gc.gridy = 4;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(multiplication,gc);
gc.gridx = 2;
gc.gridy = 4;
gc.weightx = 0.1;
gc.weighty = 0.1;
add(total,gc);
gc.gridx = 1;
gc.gridy = 5;
gc.weightx = 0.1;
gc.weighty = 5;
add(clearButton,gc);
//ActionButton
No1.addActionListener(this);
No2.addActionListener(this);
No3.addActionListener(this);
No4.addActionListener(this);
No5.addActionListener(this);
No6.addActionListener(this);
No7.addActionListener(this);
No8.addActionListener(this);
No9.addActionListener(this);
No0.addActionListener(this);
addition.addActionListener(this);
substraction.addActionListener(this);
division.addActionListener(this);
total.addActionListener(this);
multiplication.addActionListener(this);
clearButton.addActionListener(this);
}
public void setStringListener(DigitListener digitlistener){
this.digitListener = digitlistener;
}
public void setOperatorListener(MathOperatorListener operatorListener){
this.operatorListener = operatorListener;
}
public ButtonTemplate[] iterateThroughButton(){
ButtonTemplate btn[] = {No1,No2,No3,No4,No5,No6,No7,No8,No9,No0};
return btn;
}
public ButtonTemplate[] iterateThroughOperators(){
ButtonTemplate operatorBtn[] = {addition,substraction,division,
total,multiplication,(ButtonTemplate)clearButton};
return operatorBtn;
}
public void actionPerformed(ActionEvent e) {
JButton source = (JButton)e.getSource();
for(ButtonTemplate SingleButton : iterateThroughButton()){
if(source == SingleButton){
digitListener.StringEmmiter(SingleButton.getText());
}
}
for(ButtonTemplate OperatorSingleButton : iterateThroughOperators()){
if(source == OperatorSingleButton){
System.out.println("Hello");
operatorListener.OperatorEmitter(OperatorSingleButton.getText());
}
}
}
}
MainFrame是创建对象的类
package calculator;
import java.awt.BorderLayout;
import javax.swing.JFrame;
public class MainFrame extends JFrame{
private FormArea formpanel;
private OutputArea outputText;
public MainFrame(){
super("Calculator");
setVisible(true);
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
formpanel = new FormArea();
outputText = new OutputArea();
setLayout(new BorderLayout());
formpanel.setStringListener(new DigitListener() {
public void StringEmmiter(String text) {
outputText.addText(text);
}
});
formpanel.setOperatorListener(new MathOperatorListener() {
public void OperatorEmitter(String text2) {
outputText.addText(text2);
}
});
add(formpanel,BorderLayout.WEST);
add(outputText, BorderLayout.CENTER);
}
}
感谢您非常感谢我的代码!