import java.awt.*;
import java.awt.event.*;
//界面和监听部分
public class Project1_2 extends Frame {
static TextField tf=new TextField();//显示条
public Project1_2(){
this("计算器");
}
public Project1_2(String str){
super(str);
setLayout(new BorderLayout());//主面板布局
Panel p1=new Panel();//
GridLayout gri=new GridLayout(3,3);
p1.setLayout(gri);
for(int i=1;i<=9;i++){
p1.add(new Button(String.valueOf(i)));
(new Button(String.valueOf(i))).addActionListener(new NumberKey());
}
Panel p2=new Panel();//
p2.setLayout(new GridLayout(1,2));
p2.add(new Button("0"));
p2.add(new Button("."));
Panel p3=new Panel();//
p3.setLayout(new GridLayout(2,2));
p3.add(new Button("+"));
new Button("+").addActionListener(new Slogan());//为运算符注册监听
p3.add(new Button("-"));
new Button("-").addActionListener(new Slogan());
p3.add(new Button("*"));
new Button("*").addActionListener(new Slogan());
p3.add(new Button("/"));
new Button("/").addActionListener(new Slogan());
tf.setEditable(false);//设置TextField不可编辑
Button but=new Button("=");
new Button("/").addActionListener(new Calculate());
setBounds(200,200,200,200);
setBackground(Color.blue);
setVisible(true);
add(tf,BorderLayout.NORTH);
add(p1,BorderLayout.WEST);
add(p2,BorderLayout.CENTER);
add(p3,BorderLayout.EAST);
add(but,BorderLayout.SOUTH);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//设置主窗口关闭键可用
}
public static void main(String args[]){
new Project1_2("计算器");
}
}
//以下是事件处理 class NumberKey implements ActionListener {//数字键的
int k1=1;//判断按键的次数
static String str1,str2;//2个数字
public void actionPerformed(ActionEvent e){
String ss=e.getActionCommand();
if(k1==1){
str1=ss;
Project1_2.tf.setText(str1);//??
k1++;}
else
str2=ss;
Project1_2.tf.setText(str2);//??
}
}
//运算符的
class Slogan implements ActionListener{
static String str3;//保存运算符
public void actionPerformed(ActionEvent e){ String ss=e.getActionCommand();
if(ss.equals("+"))
str3+="+";
else if(ss.equals("-"))
str3+="-";
else if(ss.equals("*"))
str3+="*";
else if(ss.equals("/"))
str3+="/";
}
}
//"="号的
class Calculate implements ActionListener{
public void actionPerformed(ActionEvent e){
String ss=e.getActionCommand();
Double a=Double.valueOf(NumberKey.str1).doubleValue(),
b=Double.valueOf(NumberKey.str2).doubleValue();//转换2个数字的形式为double型
if(ss.equals("=")){//进行运算
if((Slogan.str3).equals("+"))
Project1_2.tf.setText(String.valueOf((a+b)));
else if((Slogan.str3).equals("-"))
Project1_2.tf.setText(String.valueOf(a-b));
else if((Slogan.str3).equals("*"))
Project1_2.tf.setText((String.valueOf(a*b)));
else if((Slogan.str3).equals("/"))
Project1_2.tf.setText(String.valueOf(a/b));
}
}
}
为什么显示条TextField不能显示内容啊........事件处理的部分有问题希望大家能帮帮忙...分不是问题
import java.awt.event.*;
//界面和监听部分
public class Project1_2 extends Frame {
static TextField tf=new TextField();//显示条
public Project1_2(){
this("计算器");
}
public Project1_2(String str){
super(str);
setLayout(new BorderLayout());//主面板布局
Panel p1=new Panel();//
GridLayout gri=new GridLayout(3,3);
p1.setLayout(gri);
for(int i=1;i<=9;i++){
p1.add(new Button(String.valueOf(i)));
(new Button(String.valueOf(i))).addActionListener(new NumberKey());
}
Panel p2=new Panel();//
p2.setLayout(new GridLayout(1,2));
p2.add(new Button("0"));
p2.add(new Button("."));
Panel p3=new Panel();//
p3.setLayout(new GridLayout(2,2));
p3.add(new Button("+"));
new Button("+").addActionListener(new Slogan());//为运算符注册监听
p3.add(new Button("-"));
new Button("-").addActionListener(new Slogan());
p3.add(new Button("*"));
new Button("*").addActionListener(new Slogan());
p3.add(new Button("/"));
new Button("/").addActionListener(new Slogan());
tf.setEditable(false);//设置TextField不可编辑
Button but=new Button("=");
new Button("/").addActionListener(new Calculate());
setBounds(200,200,200,200);
setBackground(Color.blue);
setVisible(true);
add(tf,BorderLayout.NORTH);
add(p1,BorderLayout.WEST);
add(p2,BorderLayout.CENTER);
add(p3,BorderLayout.EAST);
add(but,BorderLayout.SOUTH);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//设置主窗口关闭键可用
}
public static void main(String args[]){
new Project1_2("计算器");
}
}
//以下是事件处理 class NumberKey implements ActionListener {//数字键的
int k1=1;//判断按键的次数
static String str1,str2;//2个数字
public void actionPerformed(ActionEvent e){
String ss=e.getActionCommand();
if(k1==1){
str1=ss;
Project1_2.tf.setText(str1);//??
k1++;}
else
str2=ss;
Project1_2.tf.setText(str2);//??
}
}
//运算符的
class Slogan implements ActionListener{
static String str3;//保存运算符
public void actionPerformed(ActionEvent e){ String ss=e.getActionCommand();
if(ss.equals("+"))
str3+="+";
else if(ss.equals("-"))
str3+="-";
else if(ss.equals("*"))
str3+="*";
else if(ss.equals("/"))
str3+="/";
}
}
//"="号的
class Calculate implements ActionListener{
public void actionPerformed(ActionEvent e){
String ss=e.getActionCommand();
Double a=Double.valueOf(NumberKey.str1).doubleValue(),
b=Double.valueOf(NumberKey.str2).doubleValue();//转换2个数字的形式为double型
if(ss.equals("=")){//进行运算
if((Slogan.str3).equals("+"))
Project1_2.tf.setText(String.valueOf((a+b)));
else if((Slogan.str3).equals("-"))
Project1_2.tf.setText(String.valueOf(a-b));
else if((Slogan.str3).equals("*"))
Project1_2.tf.setText((String.valueOf(a*b)));
else if((Slogan.str3).equals("/"))
Project1_2.tf.setText(String.valueOf(a/b));
}
}
}
为什么显示条TextField不能显示内容啊........事件处理的部分有问题希望大家能帮帮忙...分不是问题
for(int i=1;i<=9;i++){
p1.add(new Button(String.valueOf(i)));
(new Button(String.valueOf(i))).addActionListener(new NumberKey());
}在循环中,你加入到new了两个button,一个加入到面板,一个加监听,汗~~
改为
Button bu = null;
for (int i = 1; i <= 9; i++) {
bu = new Button(String.valueOf(i));
p1.add(bu);
bu.addActionListener(new NumberKey());
}一会改完给你贴出来...
忘了加括号了吧,结果进第一歌分支的出来都还要执行一下setText(str2),把已然显示的数字盖掉了if(k1==1){
str1=ss;
Project1_2.tf.setText(str1);
k1++;}
else
str2=ss;
Project1_2.tf.setText(str2);改为
if(k1==1){
str1=ss;
Project1_2.tf.setText(str1);
k1++;}
else
{
str2=ss;
Project1_2.tf.setText(str2);
}代码我就不贴了,这两个地方搞定就ok,能显示...