package test;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
//首先写一段说明,我稍微加了点修改,你的思路应该是这样:
//1.首先一开始就在文本框输入一个数字,这个代表第一个操作数
//2.然后按下一个操作的按钮,可能是+或者其他,给这个按钮的监听器加入的操作就是把输入的值传给你的a,就是第一个操作数,
//然后清空文本框。这里有一个关键点,就是有一个属性来标记你做的是什么操作,比如+,也就是你里面的fh的功能
//3.然后在文本框中再次输入一个数字,作为另一个操作数。
//4.然后按下等于这个按钮,给这个按钮的监听器加入的操作就是把输入的值传给你的b,并且计算结果,
//把文本框的文本赋值为你计算的结果
public class mainFrame extends JFrame
{
static final int WIDE = 200;
static final int HIGHT = 130;
public String a = "0";
public String b = "0";
public int fh = 4;
public mainFrame()
{
setTitle("-_-");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(WIDE,HIGHT);
setLocation(300,200);
setResizable(false);
setVisible(true);
JPanel PANEL = new JPanel();
setContentPane(PANEL);
final JTextField t1 = new JTextField(15);
// 文本框
t1.setHorizontalAlignment(JTextField.RIGHT);
PANEL.add(t1);
t1.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent event)
{
char ch=event.getKeyChar();
if(ch<'0'||ch>'9')
{
event.consume();
}
}
});
JButton b3 = new JButton("-");
//减号按钮
PANEL.add(b3);
b3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
a = t1.getText();
fh = 0;
//把文本框清空
t1.setText(null);
//使得文本框重新获得输入焦点
t1.grabFocus();
}
});
JButton b1 = new JButton("+");
//加号按钮
PANEL.add(b1);
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
a = t1.getText();
fh = 1;
//把文本框清空
t1.setText(null);
//使得文本框重新获得输入焦点
t1.grabFocus();
}
});
JButton b4 = new JButton("*");
PANEL.add(b4);
//乘号按钮
b4.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
a = t1.getText();
fh = 2;
//把文本框清空
t1.setText(null);
//使得文本框重新获得输入焦点
t1.grabFocus();
}
});
JButton b5 = new JButton("/");
//除号按钮
PANEL.add(b5);
b5.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
a = t1.getText();
fh = 3;
//把文本框清空
t1.setText(null);
//使得文本框重新获得输入焦点
t1.grabFocus();
}
});
JButton b2 = new JButton("=");
//等号按钮
PANEL.add(b2);
b2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
b = t1.getText();
if(fh==1)
{
t1.setText( String.valueOf( Integer.parseInt(a) + Integer.parseInt(b) ));
}
else if(fh==0)
{
t1.setText( String.valueOf( Integer.parseInt(a) - Integer.parseInt(b) ));
}
else if(fh==2)
{
t1.setText( String.valueOf( Integer.parseInt(a) * Integer.parseInt(b) ));
}
else if(fh==3)
{
t1.setText( String.valueOf( Integer.parseInt(a) / Integer.parseInt(b) ));
}
}
});
JButton exit = new JButton("退出");
PANEL.add(exit);
exit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent Event)
{
System.exit(0);
}
});
//注意这里加入的这一句,否则我运行时候没有显示出界面组件
this.validate();
}
public static void main(String[] args)
{
new mainFrame();
}
}
上面我稍微改了下,然后回答下你的问题:
1.你说的问题1不存在啊,我打开时可以输入的啊。
2.谈下我对你程序的意见,首先就是你的那个类成员变量的控制权限都太大了,都是public,不符合封装的设计思路。
其次,对一般的计算器来说,你的布局管理器选择有问题,第一,一个好的布局是布局管理器的综合使用;第二,我的建议是首先使用一个上下布局,上面放一个panel,用于放那个输入数字的文本框;下面放一个panel,布局管理器可以使用GridLayout,你可以去查查API。每一个网格(Grid)总再放一个button,用于放那些按键,就呈现出了计算器的效果了,哈哈,你可以试试,至于监听器的逻辑,你现在的依然可以使用。