java四则运算

老师出的题,题意是使用布局分方式做四则运算,做完之后我发现在事件监听上出了点问题,这方面还是没有搞懂按“+”这个按钮就是把text1+text2,希望高手能指点一下,谢谢... 老师出的题,题意是使用布局分方式做四则运算,做完之后我发现在事件监听上出了点问题,这方面还是没有搞懂

按“+”这个按钮就是把text1+text2,希望高手能指点一下,谢谢了。

两个text 1个label 输出结果用的,还有就是but + - * / 这四个按钮。

我写的代码如下

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Buju extends JFrame
{JTextField text1,text2;
JButton but1,but2,but3,but4;
JLabel lab1;

public Buju(){
super("布局模式");
setBounds(20,20,500,400);
Container contentPane=getContentPane();
contentPane.setLayout(new BorderLayout(10,10));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp1=new JPanel(new FlowLayout());
JPanel jp2=new JPanel(new FlowLayout());

text1=new JTextField(5);

jp2.add(text1);
text2=new JTextField(5);

jp2.add(text2);
lab1=new JLabel("输出结果");
jp2.add(lab1);
but1=new JButton("+");

jp1.add(but1);
but2=new JButton("-");

jp1.add(but2);
but3=new JButton("*");

jp1.add(but3);
but4=new JButton("/");

jp1.add(but4);
contentPane.add(jp2,BorderLayout.CENTER);
contentPane.add(jp1,BorderLayout.SOUTH);
}

private void but1ActionPerformed(java.awt.event.ActionEvent evt) {//这里就不对劲了,也不知道该怎么写了。
double x,y,s;
String str;
x=Double.valueOf(text1.getText());
y=Double.valueOf(text2.getText());
s=x+y;
str=String.valueOf(s);
lab1.setText(str);
}

public static void main(String[] args) {
Buju bj=new Buju();
bj.setVisible(true);
}
}
展开
 我来答
zsx10110
2012-03-22 · TA获得超过8872个赞
知道大有可为答主
回答量:2369
采纳率:66%
帮助的人:3069万
展开全部
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class calculator extends JFrame implements ActionListener {
private boolean i=true,clickable = true ;//这里的clickabel 是用来判断小数点的 如果有小数点的话 clickable则为false就不对小数点进行添加了 i在下面有解释
private double value=0; //这个就是显示出来的值了
String operate = "="; //操作数 默认情况下是=号
JFrame jframe=new JFrame("计算机");
JTextField text1=new JTextField("0");
JButton back = new JButton("退格");
JButton daoshu = new JButton("1/x");
JButton remain = new JButton("%");
JButton PI = new JButton("PI"); //显示圆周率小数点后7位
JButton square = new JButton("x^2");
JButton cube = new JButton("x^3");
JButton plu=new JButton("+");
JButton min=new JButton("-");
JButton mul=new JButton("*");
JButton equ=new JButton("=");
JButton div=new JButton("/");
JButton code=new JButton("+/-");
JButton point=new JButton(".");
JButton num1=new JButton("1");
JButton num2=new JButton("2");
JButton num3=new JButton("3");
JButton num4=new JButton("4");
JButton num5=new JButton("5");
JButton num6=new JButton("6");
JButton num7=new JButton("7");
JButton num8=new JButton("8");
JButton num9=new JButton("9");
JButton num0=new JButton("0");
JButton num00=new JButton("00");
JButton clear=new JButton("C");
calculator(){
jframe.setSize(400, 400);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p=new JPanel();
p.setBackground(Color.gray);
p.setLayout(new GridLayout(5, 5)); //采用的布局方式为网格布局
PI.addActionListener(this);
daoshu.addActionListener(this);
remain.addActionListener(this);
square.addActionListener(this);
cube.addActionListener(this);
plu.addActionListener(this);
equ.addActionListener(this);
num1.addActionListener(this);
num2.addActionListener(this);
clear.addActionListener(this);
num3.addActionListener(this);
num4.addActionListener(this);
num5.addActionListener(this);
num6.addActionListener(this);
num7.addActionListener(this);
num8.addActionListener(this);
num9.addActionListener(this);
num0.addActionListener(this);
num00.addActionListener(this);
min.addActionListener(this);
code.addActionListener(this);
div.addActionListener(this);
point.addActionListener(this);
mul.addActionListener(this);
back.addActionListener(this);
jframe.add(p);
p.add(PI);
p.add(code);
p.add(daoshu);
p.add(back);
p.add(clear);
p.add(num7);
p.add(num8);
p.add(num9);
p.add(plu);
p.add(remain);
p.add(num4);
p.add(num5);
p.add(num6);
p.add(min);
p.add(square);
p.add(num1);
p.add(num2);
p.add(num3);
p.add(mul);
p.add(cube);
p.add(num0);
p.add(num00);
p.add(point);
p.add(div);
p.add(equ);

jframe.add(text1,"North");
jframe.setLocation(300, 300);
jframe.setVisible(true);
}
public void actionPerformed(ActionEvent evt)
{
String str1,str2;
Object soc=evt.getSource();
String s = evt.getActionCommand(); //获取按钮的数据
if(soc==back){ //进行退格操作
str1=text1.getText();
int n=str1.length();
text1.setText(str1.substring(0,n-1));
str2 = text1.getText();
}
else if (s.equals("x^2")) {
str1=text1.getText();
double k = Double.parseDouble(str1);
k *=k;
text1.setText(String.valueOf(k));
}
else if (s.equals("x^3")) {
str1=text1.getText();
double k = Double.parseDouble(str1);
k =k*k*k;
text1.setText(String.valueOf(k));
}
else if(s.equals("PI")){ //显示圆周率
double Pi=3.1415926;
String pi=String.valueOf(Pi);
text1.setText(pi);
}
else if(s.equals("+/-")){ //变换正负号
double a = 0;
str1=text1.getText();
a=Double.parseDouble(str1.trim());
a=-1*a;
str1=String.valueOf(a);
text1.setText(str1);
}
else if(s.equals("1/x")){ //求倒
str1=text1.getText();
double i = 1/Double.parseDouble(str1.trim());
String k = String.valueOf(i);
text1.setText(k);
}
else if(s.equals(".")){ //小数点
clickable=true;
for (int i = 0; i < text1.getText().length(); i++)
if ('.' == text1.getText().charAt(i))
{
clickable=false;
break;
} //第一层判断是否里面含有小数点;
if(clickable==true) //第二层判断
text1.setText(text1.getText()+".");
i=false;
}
else if(s.equals("C")){ //清零 所有的数据变回初始值
value = 0;
text1.setText("0");
i=true;
operate = "=" ;
}

else if ('0' <= s.charAt(0) && s.charAt(0) <= '9' ) { //若输入的为数字以及小数点的时候执行下面
if (i) { //判断获得的command是否为操作符
text1.setText(s);
}
else {
text1.setText(text1.getText() + s);
}
i = false;
}
else { //若输入运算操作符的话则执行下面的代码
count(Double.parseDouble(text1.getText().trim())); //这里一开始调用 count()方法的话首先执行的是operate.equals("=")
//执行上个操作符的运算
operate = s;
i = true;
}
}
private void count(double a) { //计算区域
if (operate.equals("+")) {
value += a;
}
else if (operate.equals("-")) {
value -= a;
}
else if (operate.equals("*")) {
value *= a;
}
else if (operate.equals("/")) {
value /= a;
}
else if (operate.equals("%")) {
value %= a;
}

else if (operate.equals("=")) {
value = a;
}
text1.setText(Double.toString(value));
}

public static void main(String[] arg)
{
calculator cal=new calculator();
}
}

这是例子 你可以参考下~监听的 部分
更多追问追答
追问
我就监听部分不太会,而且从win32一下转到swing界面不太适应,突然找不着调的感觉,我也找过很多监听的例子,但是还是没有明白。
追答
你有监听函数 那你总要去监听谁吧 所以 你之前要有个addActionListener 你的代码没有这句吧 就是哪个按钮需要监听 你就对那个按钮加个监听 接着在函数里面实现你点击按钮的响应方法
百度网友845f74e61
2012-03-23 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1589万
展开全部
给你改了,
1.你给没有实现 ActionListener 的类,这个就是处理按钮点下事件的。可以单独写类,也可以象下边这样实现。
2.没有给按钮添加侦听器。but1.addActionListener(this);
3.点击事件的方法不对。是public void actionPerformed(ActionEvent e) (在ActionListener 接口中定义的,也是必须实现的方法。) 不是private void but1ActionPerformed(java.awt.event.ActionEvent evt)
你这样写有点象net的感觉,按钮but1 点击方法是 but1_click(event)
java里不是这样用的。

--------------------------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Buju extends JFrame implements ActionListener {
JTextField text1, text2;
JButton but1, but2, but3, but4;
JLabel lab1, result;

public Buju() {
super("布局模式");
setBounds(20, 20, 500, 400);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout(10, 10));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp1 = new JPanel(new FlowLayout());
JPanel jp2 = new JPanel(new FlowLayout());

text1 = new JTextField(5);

jp2.add(text1);
text2 = new JTextField(5);

jp2.add(text2);
lab1 = new JLabel("输出结果");
jp2.add(lab1);
result = new JLabel("");
jp2.add(result);
but1 = new JButton("+");

jp1.add(but1);
but2 = new JButton("-");

jp1.add(but2);
but3 = new JButton("*");

jp1.add(but3);
but4 = new JButton("/");

jp1.add(but4);
contentPane.add(jp2, BorderLayout.CENTER);
contentPane.add(jp1, BorderLayout.SOUTH);

but1.addActionListener(this);
but2.addActionListener(this);
but3.addActionListener(this);
but4.addActionListener(this);
}

private void but1ActionPerformed(java.awt.event.ActionEvent evt) {// 这里就不对劲了,也不知道该怎么写了。
double x, y, s;
String str;
x = Double.valueOf(text1.getText());
y = Double.valueOf(text2.getText());
s = x + y;
str = String.valueOf(s);
lab1.setText(str);
}

public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
double b1, b2;
try {
b1 = Double.parseDouble(text1.getText());
b2 = Double.parseDouble(text2.getText());
} catch (Exception ex) {
return;
}
if ("+".equals(btn.getText())) {
result.setText(b1 + b2 + "");
}
if ("-".equals(btn.getText())) {
result.setText(b1 - b2 + "");
}
if ("*".equals(btn.getText())) {
result.setText(b1 * b2 + "");
}
if ("/".equals(btn.getText())) {
result.setText(b1 / b2 + "");
}
}

public static void main(String[] args) {
Buju bj = new Buju();
bj.setVisible(true);
}

}
更多追问追答
追问
有些代码没看懂

but1.addActionListener(this);//这里为什么要用this?
JButton btn = (JButton) e.getSource(); //这个没看懂什么意思.
if ("+".equals(btn.getText())) { //这个为什么要这么写? 是语法就这个样么? 为什么不是 btn.getText("+");
追答
1.为什么是this
this是当前类,当前类实现了ActionListener 接口,
2.JButton btn = (JButton) e.getSource();
ActionEvent e 的触发源是按钮.
3.btn.getText("+"); 这个你是从那里看的?
这个是取当前按下按钮的text 就是为了判断那个按钮按下了,因为四个按钮用了一个侦听类,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
herrywood
2012-03-22 · TA获得超过870个赞
知道小有建树答主
回答量:523
采纳率:66%
帮助的人:480万
展开全部
监听代码but1ActionPerformed 写的没错,只是没有与but1关联起来。
but1.addActionListener(but1ActionPerformed); // 这是给but1加上事件监听,加到Buju构造函数中
其他的but2/3/4来同样处理,每个写一个监听函数,并在Buju构造函数中进行关联
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fghlmg00
2012-03-22 · TA获得超过162个赞
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:51万
展开全部
setBounds(20,20,500,400);
Container contentPane=getContentPane();
contentPane.setLayout(new BorderLayout(10,10));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp1=new JPanel(new FlowLayout());
JPanel jp2=new JPanel(new FlowLayout());

jp2.add(text2);
lab1=new JLabel("输出结果");
jp2.add(lab1);
but1=new JButton("+");

jp1.add(but1);
but2=new JButton("-");

jp1.add(but2);
but3=new JButton("*");

jp1.add(but3);
but4=new JButton("/");

jp1.add(but4);
contentPane.add(jp2,BorderLayout.CENTER);
contentPane.add(jp1,BorderLayout.SOUTH
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
态众幺7696
2012-03-23 · 超过12用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:39.8万
展开全部
看我的

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Buju extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
JTextField text1, text2;
JButton but1, but2, but3, but4;
JLabel lab1;

public Buju() {
super("布局模式");
setBounds(20, 20, 500, 400);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout(10, 10));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp1 = new JPanel(new FlowLayout());
JPanel jp2 = new JPanel(new FlowLayout());

text1 = new JTextField(5);
text2 = new JTextField(5);
lab1 = new JLabel("输出结果");

jp2.add(text1);
jp2.add(text2);
jp2.add(lab1);

but1 = new JButton("+");
but2 = new JButton("-");
but3 = new JButton("*");
but4 = new JButton("/");
but1.addActionListener(this);
but2.addActionListener(this);
but3.addActionListener(this);
but4.addActionListener(this);

jp1.add(but1);
jp1.add(but2);
jp1.add(but3);
jp1.add(but4);

contentPane.add(jp2, BorderLayout.CENTER);
contentPane.add(jp1, BorderLayout.SOUTH);
}

public void actionPerformed(java.awt.event.ActionEvent evt) {
double x, y, s;
String str;
x = Double.valueOf(text1.getText());
y = Double.valueOf(text2.getText());

if(evt.getSource()==but1){
s = x + y;
str = String.valueOf(s);
lab1.setText(str);
}
if(evt.getSource()==but2){
s = x - y;
str = String.valueOf(s);
lab1.setText(str);
}
if(evt.getSource()==but3){
s = x * y;
str = String.valueOf(s);
lab1.setText(str);
}
if(evt.getSource()==but4){
s = x / y;
str = String.valueOf(s);
lab1.setText(str);
}
}

public static void main(String[] args) {
Buju bj = new Buju();
bj.setVisible(true);
}
}
更多追问追答
追问
but1.addActionListener(this);//这里为什么要用this?
可以帮我解释一下吗?关于this一直就是含含糊糊的,
这个到底该怎么用?
追答
this是对象本身,实现(implements)ActionListener接口的类(需要写ActionPerformed方法)就可以作为一个监听器来使用,呵呵,“监听器”也太术语了,简单的说就是指专门处理事件的东西,

因为Buju implements ActionListener,所以Buju对象就是一个监听器。but1.addActionListener(this)就是but1的事件专门由“this"(Buju对象)监听器的actionPerformed方法来处理。

如果想用其它监听器来处理
class OtherClass implements ActionListener{
public void actionPerformed(ActionEvent e){
....
}
}

but1.addActionListener(new OtherClass);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式