选择框,下拉列表都可以触发事件,选择框提供两种状态,一种是选中,另一种是未选中。对于注册了监听器的选择框来说,当用户的操作使得选择框从未选中变成选中,或是从选中变成了未选中就会触发ItemEvent事件,同样的,对于下拉列表来说,如果用户选中下拉列表的某个选项,就会触发ItemEvent事件
利用addItemListener(ItemListener listener)来注册监听器
实现接口方法中的temStateChanged(ItemEvent e)方法对事件作出处理
ItemEvent事件对象除了可以使用getSource()方法返回发生ItemEvent事件的事件源,也可以使用getItemSelectable()方法返回发生ItemEvent事件的事件源
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*
实现一个简单的计算器
*/
//按钮的监听器
public class Operator implements AbstractOper {
private JTextField field1,field2;
private JTextArea textshow;
private String fuhaoO;
@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
if(fuhaoO.equals("乘法"))
{
textshow.append(field1.getText()+"*"+field2.getText()+"="+(Integer.parseInt(field1.getText())*Integer.parseInt(field2.getText())));
}
else if(fuhaoO.equals("加法"))
{
textshow.append(field1.getText()+"+"+field2.getText()+"="+(Integer.parseInt(field1.getText())+Integer.parseInt(field2.getText())));
}
else if(fuhaoO.equals("减法"))
{
textshow.append(field1.getText()+"-"+field2.getText()+"="+(Integer.parseInt(field1.getText())-Integer.parseInt(field2.getText())));
}
else if(fuhaoO.equals("取余"))
{
textshow.append(field1.getText()+"%"+field2.getText()+"="+(Integer.parseInt(field1.getText())%Integer.parseInt(field2.getText())));
}
else
{
System.out.println("hello world");
System.exit(0);
}
}
@Override
public void setFieldA(JTextField text) {
// TODO Auto-generated method stub
this.field1=text;
}
@Override
public void setFieldB(JTextField text) {
// TODO Auto-generated method stub
this.field2=text;
}
@Override
public void setTextShow(JTextArea textShow) {
// TODO Auto-generated method stub
this.textshow=textShow;
}
public void setString(String str)
{
this.fuhaoO=str;
}
}
package javawork;
import java.awt.event.ItemListener;
public interface ItemAb extends ItemListener {
public void setString(String str);
public String getFuhao();
}
package javawork;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WindowOperation extends JFrame {
private JTextField field1,field2;
private JButton button;
private JComboBox list;
private JTextArea textShow;
private Item it;
private Operator or;
public WindowOperation()
{
Container con=new Container();//初始化
con.setLayout(new FlowLayout());
or=new Operator();
field1=new JTextField(10);
field2=new JTextField(10);
button=new JButton("计算");
button.addActionListener(or);//给按钮添加监听器
list=new JComboBox();//添加列表信息
list.addItem("\\");//注意转移字符
list.addItem("加法");
list.addItem("减法");
list.addItem("乘法");
list.addItem("取余");
list.addItem("除法");
it=new Item(or,list);
list.addItemListener(it); //给下拉列表添加监听器
textShow=new JTextArea(8,10);
con.add(field1);//添加文本框
con.add(list);//添加下拉列表
con.add(field2);//添加文本框
con.add(button);//添加按钮
con.add(new JScrollPane(textShow));//添加滚动条
add(con);//给JFrame添加容器
or.setFieldA(field1);//设置文本框1
or.setFieldB(field2);//设置文本框2
or.setTextShow(textShow);
setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package javawork;
import java.awt.event.ItemEvent;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Item implements ItemAb {
Operator op;//传递String fuhaozi,获取下拉框所选信息
private String strfuhao;
private JComboBox choice;
public Item(Operator op,JComboBox box)
{
this.op=op;
this.choice=box;
}
public void itemStateChanged(ItemEvent item) {
// TODO Auto-generated method stub
String fuhao=choice.getSelectedItem().toString();//从下拉框组件中的得到组件信息
op.setString(fuhao);
System.out.println("fuhao"+fuhao);
}
@Override
public String getFuhao() {
// TODO Auto-generated method stub
return this.strfuhao;
}
}