下拉菜单 和 选择框 触发ItemListener事件
//Inner class 事件处理例一
import java.awt.*;
import java.awt.event.*;
import java.net.PortUnreachableException;
import javax.swing.*;
class WindowOperator extends JFrame
{
JTextField inputNumber1, inputNumber2; // 输入框
JComboBox choiceFuhao; // 下拉菜单
JTextArea textshow; // 输出框
JButton button; // 确认按钮
OperatorListener operator; // 监视 下拉菜单的监视器
ComputerListener computer; // 监视 ActionEvent 的监视器,也就是按钮
public WindowOperator(String s)
{
init(s);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void init(String s)
{
setLayout(new FlowLayout());
setTitle(s);
setBounds(100, 100, 390, 360);
// 实例化组件
inputNumber1 = new JTextField(5);
inputNumber2 = new JTextField(5);
choiceFuhao = new JComboBox();
button = new JButton("计算");
choiceFuhao.addItem("选择计算符号:");
String [] a = {"+", "-", "*", "/"};
for(int i = 0; i < a.length; i++)
choiceFuhao.addItem(a[i]);
textshow = new JTextArea(9, 30);
operator = new OperatorListener();
computer = new ComputerListener();
// 输入文本监视器
operator.setJComBox(choiceFuhao); // 设置下拉菜单内容
operator.setWorkTogether(computer); // 设置监听器
// 按钮和输出文本监视器
computer.setJTexFiled1(inputNumber1); // 设置数字文本内容
computer.setJTexFiled2(inputNumber2);
computer.setJTextArea(textshow);
// 注册符号的监听器
choiceFuhao.addItemListener(operator);
// 注册计算按钮的监视器
button.addActionListener(computer);
// 添加组件
add(inputNumber1);
add(choiceFuhao);
add(inputNumber2);
add(button);
add(textshow);
}
// 实例化OperatorListener,下拉菜单的监视器
public class OperatorListener implements ItemListener
{
JComboBox choice;
ComputerListener workTogether;
public void setJComBox(JComboBox box) { choice = box;} // 设置下拉菜单内容
public void setWorkTogether(ComputerListener computer) {workTogether = computer;} // 设置监听器
public void itemStateChanged(ItemEvent e)
{
String fuhao = choice.getSelectedItem().toString(); // getSelectedItem返回的是对象
workTogether.setFuhao(fuhao);
}
}
// 实例化ComputerListener,按钮的监视器
private class ComputerListener implements ActionListener
{
JTextField inpterNumber1, inpterNumber2;
JTextArea textshow;
String fuhao ;
public void setJTexFiled1(JTextField t) {inputNumber1 = t;}
public void setJTexFiled2(JTextField t) {inputNumber2 = t;}
public void setJTextArea(JTextArea t) {textshow = t; }
public void setFuhao(String s) {fuhao = s;}
public void actionPerformed(ActionEvent e)
{
//将文本中的字符串转为double
double num1 = Double.valueOf(inputNumber1.getText());
double num2 = Double.valueOf(inputNumber2.getText());
double sum = 0;
// 计算
if (fuhao.equals("+")) {sum = num1 + num2;}
else if(fuhao.equals("-")) {sum = num1 - num2;}
else if(fuhao.equals("*")) {sum = num1 * num2;}
else if(fuhao.equals("/")) {sum = num1 / num2;}
String res = String.format("%.3f", sum);
// 将结果转为字符串输出
textshow.append(num1 + " " + fuhao + " " + num2 + " = " + res + "\n");
}
}
}
//主类
public class test
{
public static void main(String args[])
{
WindowOperator win = new WindowOperator("简单计算器");
}
}
实现ItemListener
接口,覆盖函数itemStateChanged
,传入参ItemEvent
tostring
方法返回的是这个类的属性信息,首先是他所在的包的位置
比如JButton
我们也可以重写这个函数,让他返回我们希望返回的