计算器



          这就是一个计算器界面,那么这是如何做到的呢?首先看一下,这上面有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

}

}

 

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值