编写了一个例题后始终觉得自己的效率太低了:
下面是源码:
编写一个测试类:
public class Example8_9 {
public static void main(String [] args){
NumberView win = new NumberView();
win.setBounds(100,100,600,360);
win.setTitle("计算器");
}
}
编写监听器(注册监视器):
import javax.swing.*;
import java.awt.*;
public class NumberView extends JFrame {
public JTextField inputNunmberOne ,inputNumberTwo;
public JComboBox <String> choiceFuhao;
public JTextArea textShow;
public JButton button;
public OperatorListener operator; //监听ItemEvent事件的监视器
public ComputerListener computer; //监听ActionEvent事件的监视器
public NumberView(){
init();
setVisible(true);
SetDefaultCloseOpertion(JFrame.EXIT_ON_CLOSE);
}
private void SetDefaultCloseOpertion(int exitOnClose) {
}
private void init() {
setLayout(new FlowLayout());
Font font = new Font("宋体",Font.BOLD,22);
inputNumberTwo = new JTextField(5);
inputNunmberOne = new JTextField(5);
inputNunmberOne.setFont(font);
inputNumberTwo.setFont(font);
choiceFuhao = new JComboBox<>();
choiceFuhao.setFont(font);
button = new JButton("计算");
button.setFont(font);
choiceFuhao.addItem("选择运算符号:");
String [] a = {"+","-","*","/"};
for (int i=0;i<a.length;i++){
choiceFuhao.addItem(a[i]);
}
choiceFuhao.setSelectedIndex(-1); //初始状态列表没有选项被选中
textShow = new JTextArea(9,30);
textShow.setFont(font);
operator = new OperatorListener();
computer = new ComputerListener();
operator.setView(this); //将当前窗口传递给operator组合的窗口
computer.setView(this); //将当前窗口传递给computer组合的窗口
choiceFuhao.addItemListener(operator); //operator是监视器
choiceFuhao.addActionListener(operator); //operator是监视器
button.addActionListener(computer); //computer是监视器
add(inputNunmberOne);
add(choiceFuhao);
add(inputNumberTwo);
add(button);
add(new JScrollPane(textShow));
}
}
编写事件:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class OperatorListener implements ItemListener, ActionListener {
NumberView view;
public void setView(NumberView view){
this.view=view;
}
public void itemStateChanged(ItemEvent e){
String fuhao = view.choiceFuhao.getSelectedItem().toString();
view.computer.setFuhao(fuhao);
}
public void actionPerformed(ActionEvent e){
String fuhao = view.choiceFuhao.getSelectedItem().toString();
view.computer.setFuhao(fuhao);
}
}
编写计算实现类:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ComputerListener implements ActionListener {
NumberView view;
String fuhao;
public void setView(NumberView view){
this.view=view;
}
public void setFuhao(String s){
fuhao=s;
}
public void actionPerformed(ActionEvent e){
try {
double number1=Double.parseDouble(view.inputNunmberOne.getText());
double number2=Double.parseDouble(view.inputNumberTwo.getText());
double result = 0;
boolean isShow = true;
if (fuhao.equals("+")){
result=number1+number2;
}
else if (fuhao.equals("-")){
result=number1-number2;
}
else if (fuhao.equals("*")){
result=number1*number2;
}
else if (fuhao.equals("/")){
result=number1/number2;
}
else {
isShow=false;
}
if (isShow){
view.textShow.append(number1+" "+fuhao+" "+number2+" = "+result+"\n");
}
}
catch (Exception exp){
view.textShow.append("\n请输入数字字符\n");
}
}
}
下面是实现图: