这就是一个计算器界面,那么这是如何做到的呢?首先看一下,这上面有28个按钮,如果仅仅一个一个的添加上去,那是不是觉得不能再麻烦了?此时,动动脑子就可以想到:可以利用按钮数组!可以新建一个长度为28的按钮数组,但是,再仔细看看每个按钮的大小又不都一样,而用循环在窗体上添加按钮时是不可以做到这一点的。因此,必须另寻他路了,最终的解决方案是:添加四个Jpanel,东南西北四个方向添加,这样就可以达到要求了,就可以做出一个基本的界面了,再加以润色:调整界面颜色,改变字体、按钮大小等等,界面就基本差不多了。
public class MyFrame extends JFrame{
private Mylistener listener;
private JTextField jtf;
public static void main(String[] args) {
MyFrame My=new MyFrame();
My.paint();
}
// new MyFrame().paint;
public void paint(){
this.setSize(292,320);
// this.getContentPane().setBackground(Color.black);
this.setTitle("计算器");
this.setDefaultCloseOperation(3);
this.setResizable(false);
this.setLocationRelativeTo(null);
NorthPanel();
WestPanel();
EastPanel();
SouthPanel();
this.setVisible(true);
}
public void NorthPanel(){
JPanel north=new JPanel();
jtf=new JTextField(25);
jtf.setEditable(false);//设置文本框不可编辑
// north.setLayout(new FlowLayout(5,5,5));
jtf.setPreferredSize(new Dimension(25,60));//设置文本框大小
north.add(jtf);
listener=new Mylistener(jtf);
north.setBackground(Color.cyan);
north.setPreferredSize(new Dimension(0,132));
String[] str={"MC","MR","MS","M+","M-","Del","CE","C","(-)","√"};
for(int i=0;i<str.length;i++){
JButton jbu=new JButton(str[i]);
north.add(jbu);
jbu.setPreferredSize(new Dimension(52,28));
jbu.addActionListener(listener);
}
this.add(north,BorderLayout.NORTH);
}
public void WestPanel(){
JPanel west=new JPanel();
west.setBackground(Color.cyan);
west.setPreferredSize(new Dimension(175,0));
west.setLayout(new FlowLayout(5,6,5));
for(int i=1;i<10;i++){
JButton jbu=new JButton(i+"");
west.add(jbu);
jbu.setPreferredSize(new Dimension(51,36));
jbu.setFont(new Font("楷体", 4, 30));
jbu.addActionListener(listener);
}
this.add(west,BorderLayout.WEST);
}
public void EastPanel(){
JPanel east=new JPanel();
east.setBackground(Color.cyan);
east.setPreferredSize(new Dimension(114,0));
String[] str={"%","+","1/x","-",".","*"};
for(int i=0;i<str.length;i++){
JButton jbu=new JButton(str[i]);
east.add(jbu);
jbu.setPreferredSize(new Dimension(52,36));
if(str[i].equals("+")||str[i].equals("-")||str[i].equals("*")){
jbu.setFont(new Font("楷体", 4, 30));
}
jbu.addActionListener(listener);
}
this.add(east,BorderLayout.EAST);
}
public void SouthPanel(){
JPanel south=new JPanel();
south.setPreferredSize(new Dimension(0,40));
south.setBackground(Color.cyan);
String[] str={"0","="};
for(int i=0;i<str.length;i++){
JButton jbu=new JButton(str[i]);
south.add(jbu);
jbu.setPreferredSize(new Dimension(109,35));
jbu.setFont(new Font("楷体", 4, 30));
jbu.addActionListener(listener);
}
JButton jbu=new JButton("/");
jbu.setFont(new Font("楷体", 4, 30));
jbu.setPreferredSize(new Dimension(52,35));
south.add(jbu);
jbu.addActionListener(listener);
this.add(south,BorderLayout.SOUTH);
}
}
再然后就是实现每一个按钮的功能了,首先在每个按钮上添加动作监听器,再在事件监听方法中写出方法体来实现每个按钮的功能即可!
public class Mylistener implements ActionListener{
private JTextField jf;
private int array[];
private double firstnum,secondnum;
private int flag=0;
private String firststr,secondstr;
public Mylistener(JTextField jf){
this.jf=jf;
}
public void actionPerformed(ActionEvent e) {
String str=e.getActionCommand();
if(jf.getText().length()<18){
for(int i=0;i<10;i++){
if(str.equals("0")&&jf.getText().equals("0")){
jf.setText(null);
}else
if(str.equals(i+"")){
firststr=jf.getText();
secondstr=e.getActionCommand();
str=firststr+secondstr;
jf.setText(str);
jf.setFont(new java.awt.Font("楷体",4,30));//设置字体形体、粗细、大小
}
}
}
if(str.equals("CE")){
jf.setText(null);
}
if(str.equals("Del")){
}
try {
if(str.equals("+")&&jf.getText().contains(".")){
firstnum=Double.parseDouble(jf.getText());
jf.setText(null);
flag=1;
}else if(str.equals("+")){
firstnum=Integer.parseInt(jf.getText());
jf.setText(null);
flag=1;
}
} catch (Exception e2) {
// TODO: handle exception
}
try {
if(str.equals("-")&&jf.getText().contains(".")){
firstnum=Double.parseDouble(jf.getText());
jf.setText(null);
flag=2;
}else if(str.equals("-")){
firstnum=Integer.parseInt(jf.getText());
jf.setText(null);
flag=2;
}
} catch (Exception e2) {
// TODO: handle exception
}
try {
if(str.equals("*")&&jf.getText().contains(".")){
firstnum=Double.parseDouble(jf.getText());
jf.setText(null);
flag=3;
}else if(str.equals("*")){
firstnum=Integer.parseInt(jf.getText());
jf.setText(null);
flag=3;
}
} catch (Exception e2) {
// TODO: handle exception
}
try {
if(str.equals("/")){
firstnum=Double.parseDouble(jf.getText());
jf.setText(null);
flag=4;
}
} catch (Exception e2) {
// TODO: handle exception
}
try {
if(str.equals("1/x")){
jf.setText((1.0/Double.parseDouble(jf.getText()))+"");
}
} catch (Exception e2) {
// TODO: handle exception
}
try {
if(str.equals("√")){
jf.setText(Math.sqrt(Double.parseDouble(jf.getText()))+"");
}
} catch (Exception e2) {
// TODO: handle exception
}
try {
if(str.equals("(-)")){
jf.setText((0-Double.parseDouble(jf.getText()))+"");
}
} catch (Exception e2) {
// TODO: handle exception
}
if(str.equals(".")){
if(jf.getText().contains(".")){
return;
}else
jf.setText(jf.getText()+".");
}
try {
if(str.equals("=") ){
//System.out.println("**************");
secondnum=Integer.parseInt(jf.getText());
if(flag==1){
jf.setText((firstnum+secondnum)+"");
}
if(flag==2){
jf.setText((firstnum-secondnum)+"");
}
if(flag==3){
jf.setText((firstnum*secondnum)+"");
}
if(flag==4){
jf.setText((firstnum/secondnum)+"");
}
}
}catch (Exception e2) {
// TODO: handle exception
}
}
}