ItemEvent事件

本文介绍如何使用Java Swing创建一个带有下拉菜单选择运算符的简单计算器。通过监听按钮和下拉列表的事件,实现对两个输入字段进行加、减、乘、除和取余的计算,并显示结果。

 选择框,下拉列表都可以触发事件,选择框提供两种状态,一种是选中,另一种是未选中。对于注册了监听器的选择框来说,当用户的操作使得选择框从未选中变成选中,或是从选中变成了未选中就会触发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;
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值