关于组合框的事件监听问题?

Vipsier 2017-06-03 10:53:58
是这样的,我想实现一个计算器,其中有四种运算,用组合框选择,然后用“=”按钮输出结果。
如图:

以下是我的代码:

import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JButton;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

class TestCal extends JFrame
{
JTextField []t = {
new JTextField(5),
new JTextField(5),
new JTextField(5)
};
JButton b = new JButton("=");
String []s = {"加法运算:+","减法运算:-","乘法运算:x","除法运算:÷"};

TestCal()
{
super("简单计算器!");
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.setSize(320,120);
JComboBox cb = new JComboBox(s);
Container c = this.getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT));
t[0].setEditable(true);
t[1].setEditable(true);
t[2].setEditable(false);
c.add(t[0]);
c.add(cb);
c.add(t[1]);
c.add(b);
c.add(t[2]);
c.setVisible(true);
b.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
//JButton b = (JButton)e.getSource();
double num1,num2,sum;
if(e.getSource()=="+")
{
num1 = Double.parseDouble(t[0].getText());
num2 = Double.parseDouble(t[1].getText());
sum = num1+num2;
t[2].setText(String.valueOf(sum));
}
if(e.getSource()=="-")
{
num1 = Double.parseDouble(t[0].getText());
num2 = Double.parseDouble(t[1].getText());
sum = num1-num2;
t[2].setText(String.valueOf(sum));
}
if(e.getSource()=="x")
{
num1 = Double.parseDouble(t[0].getText());
num2 = Double.parseDouble(t[1].getText());
sum = num1*num2;
t[2].setText(String.valueOf(sum));
}
if(e.getSource()=="÷")
{
num1 = Double.parseDouble(t[0].getText());
num2 = Double.parseDouble(t[1].getText());
sum = num1/num2;
t[2].setText(String.valueOf(sum));
}
}
});
}


public static void main(String args[]){
TestCal tc=new TestCal();
tc.setSize(500,300);
tc.setVisible(true);
}
}

本人计算机大一新生,还请大神们多多包涵!
...全文
243 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
辣椒炒鸡 2018-11-22
  • 打赏
  • 举报
回复
可以运行但是计算结果没有赋予给t[2],即点击"="无反应。
望解决。
爱摸鱼de老邪 2017-06-04
  • 打赏
  • 举报
回复
点击=按钮得计算结果,当然要监听按钮的点击事件。至于switch(string)出错,可能是你的JDK版本低了?我的是JDK1.7
Vipsier 2017-06-04
  • 打赏
  • 举报
回复
大神,能解释下为什么不用b.addItemListener(new ItemListener(), 而用b.addActionListener(new ActionListener()吗? 还有就是我的switch(String)报错了,怎么办? 再次,感谢解答!!
爱摸鱼de老邪 2017-06-03
  • 打赏
  • 举报
回复


import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JButton;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
	
class TestCal extends JFrame 
{  
	JTextField []t = { 
			new JTextField(5),
			new JTextField(5),
			new JTextField(5)
			};
	JButton b = new JButton("=");
	String []s = {"加法运算:+","减法运算:-","乘法运算:x","除法运算:÷"};
	
	TestCal()
	{
		super("简单计算器!");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//this.setSize(320,120);
		final JComboBox cb = new JComboBox(s);
		Container c = this.getContentPane();
		c.setLayout(new FlowLayout(FlowLayout.LEFT));
	    t[0].setEditable(true);
		t[1].setEditable(true);
		t[2].setEditable(false);
		c.add(t[0]);
		c.add(cb);
		c.add(t[1]);
		c.add(b);
		c.add(t[2]);
		c.setVisible(true);
		
		//b.addItemListener(new ItemListener()
		b.addActionListener(new ActionListener()
		{
			//public void itemStateChanged(ItemEvent e)
			public void actionPerformed(ActionEvent e)
			{
				//JButton b = (JButton)e.getSource();
				double num1,num2;
				num1 = Double.parseDouble(t[0].getText());
				num2 = Double.parseDouble(t[1].getText());
				switch((cb.getSelectedItem()).toString())
				{
					case("加法运算:+"):
					{
						t[2].setText(String.valueOf(num1+num2));
						break;
					}
					case("减法运算:-"):
					{
						t[2].setText(String.valueOf(num1-num2));
						break;
					}
					case("乘法运算:x"):
					{
						t[2].setText(String.valueOf(num1*num2));
						break;
					}
					case("除法运算:÷"):
					{
						if(num2!=0l)
							t[2].setText(String.valueOf(num1/num2));
						else
							JOptionPane.showMessageDialog(TestCal.this,"分母不能为零!", "系统信息", JOptionPane.ERROR_MESSAGE);
						break;
					}
					
				}
			}	

		});
	}   
	
	
	public static void main(String args[]){
		TestCal tc=new TestCal();
    	tc.setSize(500,300);
    	tc.setVisible(true);
    }
}

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧