打开你使用的微软公司 Windows 操作系统或 Linux 等其它操作系统中自带的“计算器”软件,观察和参照其界面和功能,实现一个接近其界面和功能的计算器(标准型或科学型)的界面。
设计一个主类,来实现界面的搭建。在主类中首先定义我们需要用到的所有组件和容器。之后在构造方法中进行初始化,并完成界面的搭建。这个计算器的界面比较复杂,所以使用到了底层用容器和中间容器来搭建,底层容器使用空布局,以方便中间层容器设置位置和大小。中间层容器前两个都比较简单,使用默认布局——流式布局就好,第三个jpanel使用格式布局,以方便对计算机按键的排布,布局为6行5列。为使图形界面更加接近windows自带的计算器界面,我们使用窗口颜色设置函数Color来设置窗口颜色,设置方法按RGB形式设置。
package stanarithmapp; import javax.swing.*; import java.awt.*; import javax.swing.border.LineBorder; import java.awt.ActiveEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class stanarith { JFrame jf=null; JPanel jp1=null; JPanel jp2=null; JPanel jp3=null; JButton jb1=null; JButton jb2=null; JButton jb3=null; JButton jb4=null; JButton jb5=null; JButton jb6=null; JButton jb7=null; JButton jb8=null; JButton jb9=null; JButton jb10=null; JButton jb11=null; JButton jb12=null; JButton jb13=null; JButton jb14=null; JButton jb15=null; JButton jb16=null; JButton jb17=null; JButton jb18=null; JButton jb19=null; JButton jb20=null; JButton jb21=null; JButton jb22=null; JButton jb23=null; JButton jb24=null; JButton jb25=null; JButton jb26=null; JButton jb27=null; JButton jb28=null; JTextArea jtx=null; JLabel jla1=null; JLabel jla2=null; JLabel jla3=null; Color c=new Color(218,224,241); Color cc=new Color(165,191,218); //构造函数 public stanarith() { jf=new JFrame("计算器"); jf.setLayout(null); jf.setSize(380,440); jp1=new JPanel(); jp2=new JPanel(); jp3=new JPanel(new GridLayout(6,5)); jp1.setBackground(cc); jp2.setBackground(c); jp3.setBackground(c); jb1=new JButton("MC"); jb2=new JButton("MR"); jb3=new JButton("MS"); jb4=new JButton("M+"); jb5=new JButton("M-"); jb6=new JButton("<--"); jb7=new JButton("CE"); jb8=new JButton("C"); jb9=new JButton("±"); jb10=new JButton("根号"); jb11=new JButton("7"); jb11.addActionListener(new MyEvent()); jb12=new JButton("8"); jb12.addActionListener(new MyEvent()); jb13=new JButton("9"); jb13.addActionListener(new MyEvent()); jb14=new JButton("/"); jb15=new JButton("%"); jb16=new JButton("4"); jb16.addActionListener(new MyEvent()); jb17=new JButton("5"); jb17.addActionListener(new MyEvent()); jb18=new JButton("6"); jb18.addActionListener(new MyEvent()); jb19=new JButton("*"); jb20=new JButton("1/x"); jb21=new JButton("1"); jb21.addActionListener(new MyEvent()); jb22=new JButton("2"); jb22.addActionListener(new MyEvent()); jb23=new JButton("3"); jb23.addActionListener(new MyEvent()); jb24=new JButton("-"); jb24.addActionListener(new MyEvent()); jb25=new JButton("0"); jb25.addActionListener(new MyEvent()); jb26=new JButton("."); jb26.addActionListener(new MyEvent()); jb27=new JButton("+"); jb27.addActionListener(new MyEvent()); jb28=new JButton("="); jb28.addActionListener(new MyEvent()); jtx=new JTextArea(4,65); jla1=new JLabel("查看(V)"); jla1.setFont(new Font("隶书",Font.BOLD,15)); jla2=new JLabel("编辑(E)"); jla2.setFont(new Font("隶书",Font.BOLD,15)); jla3=new JLabel("帮助(H)"); jla3.setFont(new Font("隶书",Font.BOLD,15)); jp1.add(jla1); jp1.add(jla2); jp1.add(jla3); jp2.add(jtx); jp3.add(jb1); jp3.add(jb2); jp3.add(jb3); jp3.add(jb4); jp3.add(jb5); jp3.add(jb6); jp3.add(jb7); jp3.add(jb8); jp3.add(jb9); jp3.add(jb10); jp3.add(jb11); jp3.add(jb12); jp3.add(jb13); jp3.add(jb14); jp3.add(jb15); jp3.add(jb16); jp3.add(jb17); jp3.add(jb18); jp3.add(jb19); jp3.add(jb20); jp3.add(jb21); jp3.add(jb22); jp3.add(jb23); jp3.add(jb24); jp3.add(jb25); jp3.add(jb26); jp3.add(jb27); jp3.add(jb28); jf.getContentPane().add(jp1); jf.getContentPane().add(jp2); jf.getContentPane().add(jp3); jp1.setBounds(7,0,350,45);//宽——高 jp2.setBounds(7,45,350,100); jp3.setBounds(7,145,350,250); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String []args) { stanarith wind=new stanarith(); } public class MyEvent implements ActionListener { String a="+"; String b="-"; String c="MC"; float x1,x2,y=0; public void actionPerformed(ActionEvent e) { // if(judge()==1) { // System.out.println(judge()); // jtx.setText(""); // } if(e.getActionCommand()==a) { String str1=jtx.getText(); String str2=jtx.getText(); float x=Float.parseFloat(str1); float y=Float.parseFloat(str2); float sum=x+y; String s=String.valueOf(sum); jtx.setText(s); } if(e.getActionCommand()==b) { String str1=jtx.getText(); String str2=jtx.getText(); float x=Float.parseFloat(str1); float y=Float.parseFloat(str2); float sum=x-y; String s=String.valueOf(sum); jtx.setText(s); } if(e.getSource()==jb25) { jtx.setText("0"); } if(e.getSource()==jb23) { jtx.setText("3"); } if(e.getSource()==jb22) { jtx.setText("2"); } if(e.getActionCommand()==c) { jtx.setText(""); } } // public int judge() { // int count1 =0; // int count2 =0; // int i=0; // if(jtx1.getText().length()==0||jtx2.getText().length()==0) { // JOptionPane.showMessageDialog(null, "您没有输入完整运算数,请重新输入"); // return 1; // } // // if( t1.charAt((t1.length()-1)) == '.' || t1.charAt(0) == '.' || t2.charAt((t2.length()-1)) == '.' || t2.charAt(0) == '.') // { // JOptionPane.showMessageDialog(null, "您输入的小数点处于最前面或者最后面,请重新输入"); // return 1; // } // for(i=0;i<t1.length();i++) { // if(t1.charAt(i)=='.') { // count1++; // } // if(count1>1) { // JOptionPane.showMessageDialog(null, "您输入的小数点太多了,请重新输入"); // return 1; // } // if(t1.charAt(i)!='.'&&t1.charAt(i)!='0'&&t1.charAt(i)!='1'&&t1.charAt(i)!='2'&&t1.charAt(i)!='3'&&t1.charAt(i)!='4'&&t1.charAt(i)!='5'&&t1.charAt(i)!='6'&&t1.charAt(i)!='7'&&t1.charAt(i)!='8'&&t1.charAt(i)!='9') { // JOptionPane.showMessageDialog(null, "您输入了非法字符,请重新输入"); // return 1; // } // } // for(i=0;i<t2.length();i++) { // if(t2.charAt(i)=='.') { // count2++; // } // if(count2>1) { // JOptionPane.showMessageDialog(null, "您输入的小数点太多了,请重新输入"); // return 1; // } // if(t2.charAt(i)!='.'&&t2.charAt(i)!='0'&&t2.charAt(i)!='1'&&t2.charAt(i)!='2'&&t2.charAt(i)!='3'&&t2.charAt(i)!='4'&&t2.charAt(i)!='5'&&t2.charAt(i)!='6'&&t2.charAt(i)!='7'&&t2.charAt(i)!='8'&&t2.charAt(i)!='9') { // JOptionPane.showMessageDialog(null, "您输入了非法字符,请重新输入"); // return 1; // } // } // return 0; //} }}