次计算器可以随意增加按钮,且不影响其它的按钮,如需增加更多的计算按钮只需要修改Answer2.java中的部分代码即可:
switch(ch1)
{case"=":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 0;
break;case"+":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 1;
break;case"-":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 2;
break;case"*":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 3;
break;case"/":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 4;
break;case"sqrt":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 5;
break;case"del":
flag= 6;
break;//后面追加case 键值,并赋值标志变量,flag++;}
}returnzongnum;
}PRivatestaticdoublefflag(doublenum,doublezongnum,intflag){switch(flag){case0:
zongnum=num;
break;case1:
zongnum=zongnum+num;
break;case2:
zongnum=zongnum-num;
break;case3:
zongnum=zongnum*num;
break;case4:
zongnum=zongnum/num;
break;case5:
zongnum=Math.cbrt(zongnum);
break;case6:
zongnum= 0;//此处填写相应的计算代码,判断flag;
break;
}returnzongnum;
}
以下是源代码,有startFrame.java 和 Answer2.java 分别给出:
importjava.awt.Color;importjava.awt.Dimension;importjava.awt.FlowLayout;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.lang.reflect.InvocationTargetException;importjava.util.Vector;importjavax.swing.GroupLayout;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextField;importjavax.swing.GroupLayout.Alignment;importjavax.swing.LayoutStyle.ComponentPlacement;importjavax.swing.SwingUtilities;importjavax.swing.border.EmptyBorder;publicclassstatrFrameextendsJFrameimplementsActionListener{privateintx,y;privateintwidth, height;privateJFrame jf;privateJPanel contentPane;privateJPanel panel,panel_1;privateJTextField jt;privateString str="",str1="",str2="";privateString[] strindex;privateVector<JButton> bu =newVector<>();publicstatrFrame(intwidth,intheight,intx,inty,String str){this.strindex =str.split(",");this.str =str;this.x =x;this.y =y;this.width =width;this.height=height;
jf=newJFrame("计算机");
panel=newJPanel();
panel_1=newJPanel();
jt=newJTextField();
contentPane=newJPanel();
contentPane.setBorder(newEmptyBorder(5, 5, 5, 5));
jf.setContentPane(contentPane);
GroupLayout gl_contentPane=newGroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(42)
.addComponent(panel, GroupLayout.DEFAULT_SIZE,342, Short.MAX_VALUE)
.addGap(38))
.addComponent(panel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE,422, Short.MAX_VALUE)
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(panel, GroupLayout.DEFAULT_SIZE,34, Short.MAX_VALUE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(panel_1, GroupLayout.DEFAULT_SIZE,202, Short.MAX_VALUE))
);
GridLayout gd=newGridLayout(x,y,0,0);
panel_1.setLayout(gd);
jt=newJTextField();
jt.setColumns(10);
GroupLayout gl_panel=newGroupLayout(panel);
gl_panel.setHorizontalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addComponent(jt, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE,342, Short.MAX_VALUE)
);
gl_panel.setVerticalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addComponent(jt, GroupLayout.PREFERRED_SIZE,34, GroupLayout.PREFERRED_SIZE)
);
panel.setLayout(gl_panel);
contentPane.setLayout(gl_contentPane);if(y!=0){
gd.setHgap(y);
panel_1.setLayout(gd);
}elsepanel_1.setLayout(newGridLayout());for(inti =0;i<strindex.length;i++){
bu.add(newJButton(strindex[i]));
}
}publicstatrFrame(intwidth,intheight,intx,String str){this.strindex =str.split(",");this.str =str;this.x =x;this.width =width;this.height=height;
jf=newJFrame("计算机");
panel=newJPanel();
panel_1=newJPanel();
jt=newJTextField();
contentPane=newJPanel();
contentPane.setBorder(newEmptyBorder(5, 5, 5, 5));
jf.setContentPane(contentPane);
GroupLayout gl_contentPane=newGroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(42)
.addComponent(panel, GroupLayout.DEFAULT_SIZE,342, Short.MAX_VALUE)
.addGap(38))
.addComponent(panel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE,422, Short.MAX_VALUE)
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(panel, GroupLayout.DEFAULT_SIZE,34, Short.MAX_VALUE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(panel_1, GroupLayout.DEFAULT_SIZE,202, Short.MAX_VALUE))
);
GridLayout gd=newGridLayout(x,y,0,0);
panel_1.setLayout(gd);
jt=newJTextField();
jt.setColumns(10);
GroupLayout gl_panel=newGroupLayout(panel);
gl_panel.setHorizontalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addComponent(jt, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE,342, Short.MAX_VALUE)
);
gl_panel.setVerticalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addComponent(jt, GroupLayout.PREFERRED_SIZE,34, GroupLayout.PREFERRED_SIZE)
);
panel.setLayout(gl_panel);
contentPane.setLayout(gl_contentPane);if(x!=0){
gd.setRows(x);
panel_1.setLayout(gd);
}elsepanel_1.setLayout(newGridLayout());for(inti =0;i<strindex.length;i++){
bu.add(newJButton(strindex[i]));
}
}publicvoidstart(){for(JButton button:bu){
JPanel panel_2=newJPanel();
panel_2.setLayout(newFlowLayout());
panel_1.add(panel_2);//button.setPreferredSize(new Dimension(130, 50));panel_2.add(button);
button.setFont(newFont("微软雅黑", Font.PLAIN, 40));
button.addActionListener(this);
jt.setFont(newFont("宋体", Font.PLAIN, 30));
}
jf.setDefaultCloSEOperation(EXIT_ON_CLOSE);
jf.setSize(width, height);
jf.setVisible(true);newAdjust().start();
}publicstaticvoidmain(String[] args) {try{
SwingUtilities.invokeAndWait(newRunnable() {
@Overridepublicvoidrun() {
statrFrame sf=newstatrFrame(500,600,5,"7,8,9,/,4,5,6,*,1,2,3,-,0,.,+,=,sqrt,->,del,abs");
sf.start();
}
});
}catch(InvocationTargetException |InterruptedException e) {//TODO Auto-generated catch blocke.printStackTrace();
}
}
@OverridepublicvoidactionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();if(jb.getText().equals("+")||jb.getText().equals("-")||jb.getText().equals("*")||jb.getText().equals("/")||jb.getText().equals("sqrt"))
{
str2=str2+",";
str2=str2+jb.getText();
str2=str2+",";
str1=str1+jb.getText();
}if(jb.getText().equals("="))
{if(Answer2.suanzhi(str2) % 1.0 == 0){
str1=Long.toString((long)Answer2.suanzhi(str2));
}else{
str1=Double.toString(Answer2.suanzhi(str2));
}
}if(jb.getText().equals("1")||jb.getText().equals("2")||jb.getText().equals("3")||jb.getText().equals("4")||jb.getText().equals("5")||jb.getText().equals("6")||jb.getText().equals("7")||jb.getText().equals("8")||jb.getText().equals("9")||jb.getText().equals("0")||jb.getText().equals("."))
{
str1=str1+jb.getText();
str2=str2+jb.getText();
}if(jb.getText().equals("del"))
{
str1= "";
}if(jb.getText().equals("->"))
{
str1= str1.substring(0, str1.length()-1);
}
jt.setText(str1);
}publicclassAdjustextendsThread{
@Overridepublicvoidrun() {while(true){
jt.setPreferredSize(newDimension(jf.getWidth()/6, jf.getHeight()/15));for(JButton button:bu){
button.setPreferredSize(newDimension(jf.getWidth()/7, jf.getHeight()/10));
}
}
}
}
}
publicclassAnswer2 {publicstaticdoublesuanzhi(String str){doublezongnum=0;doublenum=0;intindex=0;intflag=0;
String s1="";
str=str+",=";
String[] ch= str.split(",");for(inti=0;i<ch.length;i++){
String ch1=ch[i];switch(ch1)
{case"=":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 0;
break;case"+":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 1;
break;case"-":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 2;
break;case"*":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 3;
break;case"/":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 4;
break;case"sqrt":
num= Double.parseDouble(ch[i-1]);
zongnum=fflag(num,zongnum,flag);
flag= 5;
break;case"del":
flag= 6;
break;
}
}returnzongnum;
}privatestaticdoublefflag(doublenum,doublezongnum,intflag){switch(flag){case0:
zongnum=num;
break;case1:
zongnum=zongnum+num;
break;case2:
zongnum=zongnum-num;
break;case3:
zongnum=zongnum*num;
break;case4:
zongnum=zongnum/num;
break;case5:
zongnum=Math.cbrt(zongnum);
break;case6:
zongnum= 0;
break;
}returnzongnum;
}
}