import javax.swing.*;
package a;
import java.awt.event.*;
import java.awt.*;
public class Calculator1 extends Frame implements ActionListener {
Frame frame;
Panel panel;
TextField t;
Button[] button;
StringBuffer str=new StringBuffer("");
double x, y;
int z;
Calculator1()
{
frame=new Frame();
frame.setLayout(new BorderLayout());
MenuBar mb=new MenuBar();
Menu menu1=new Menu("编辑(E)");
Menu menu2=new Menu("查看(v)");
Menu menu3=new Menu("帮助(H)");
MenuItem mi1=new MenuItem("复制(C) Ctrl+C ");
MenuItem mi2=new MenuItem("粘贴(V) Ctrl+V ");
MenuItem m2=new MenuItem("退出");
m2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e2)
{
System.exit(0);
}
});
MenuItem mi3=new MenuItem("标准型(T) ");
MenuItem mi4=new MenuItem("科学型(S) ");
MenuItem mi5=new MenuItem("数据分组(I) ");
MenuItem mi6=new MenuItem("帮助主题(H) ");
MenuItem mi7=new MenuItem("关于计算器(A) ");
String s[]={"My","love","退格","CE","C","7","8","9","+/-","sqrt","4","5","6","/","%","1","2","3","-","0","*","1/x",".","+","="};
button=new Button[s.length];
panel=new Panel();
panel.setLayout(new GridLayout(5,5));
t=new TextField("0",27);
t.setEnabled(false);
for(int i=0;i<button.length;i++)
{
button[i]=new Button(s[i]);
button[i].setForeground(Color.blue);
panel.add(button[i]);
}
for(int i=0;i<button.length;i++)
{
button[i].addActionListener(this);
// button[i].setBackground(new Color(194,171,245));
}
button[0].addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e){
button[0].setBackground(Color.cyan);
}
});
button[0].addMouseListener(new MouseAdapter(){
public void mouseExited(MouseEvent e){
// button[0].setBackground());
}});
mb.add(menu1);
mb.add(menu2);
mb.add(menu3);
mb.add(menu1);
mb.add(menu2);
mb.add(menu3);
menu1.add(mi1);
menu1.add(mi2);
menu1.add(m2);
menu2.add(mi3);
menu2.add(mi4);
menu2.add(mi5);
menu3.add(mi6);
menu3.add(mi7);
frame.setMenuBar(mb);
frame.setBounds(300,300,260,370);
frame.add(t,BorderLayout.NORTH);
frame.add(panel,BorderLayout.CENTER);
frame.setBackground(Color.blue);
frame.setResizable(false);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e1) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e2)
{
try{
if(e2.getSource()==button[3])//CE
{
t.setText("0");
str.setLength(0);
}
else if(e2.getSource()==button[4])//C
{
t.setText("0");
str.setLength(0);
}
else if(e2.getSource()==button[8])//+/-
{
x=Double.parseDouble(t.getText().trim());
t.setText(""+(-x));
}
else if(e2.getSource()==button[23])//+
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0); y=0d;
z=0;
}
else if(e2.getSource()==button[18])//-
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0);
y=0d;
z=1;
}
else if(e2.getSource()==button[20])//*
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0);
y=0d;
z=2;
}
else if(e2.getSource()==button[13])// /
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0);
y=0d;
z=3;
}
else if(e2.getSource()==button[24])// =
{
str.setLength(0);
switch(z)
{
case 0 : t.setText(""+(x+y));break;
case 1 : t.setText(""+(x-y));break;
case 2 : t.setText(""+(x*y));break;
case 3 : t.setText(""+(x/y));break;
}
}
else if(e2.getSource()==button[22])// .
{
if(t.getText().trim().indexOf('.')!=-1)
{ }
else
{
if(t.getText().trim().equals("0"))
{
str.setLength(0);
t.setText((str.append("0"+e2.getActionCommand())).toString());
}
else if(t.getText().trim().equals(""))
{
}
else
{
t.setText(str.append(e2.getActionCommand()).toString());
}
}
y=0d;
}
else if(e2.getSource()==button[9])// sqrt
{
x=Double.parseDouble(t.getText().trim());
t.setText("数字格式异常");
if(x<0)
t.setText("负数没有平方根");
else
t.setText(""+Math.sqrt(x));
str.setLength(0);
y=0d;
}
else if(e2.getSource()==button[14])//%
{
x=Double.parseDouble(t.getText().trim());
t.setText(""+(0.01*x));
str.setLength(0);
y=0d;
}
else if(e2.getSource()==button[21])// 1/x
{ x=Double.parseDouble(t.getText().trim());
if(x==0)
{
t.setText("除数不能为零");
}
else
{
t.setText(""+(1/x));
}
str.setLength(0);
y=0d;
}
else
{
if(e2.getSource()==button[19])//0
{
if(t.getText().trim().equals("0"))
{ }
else
{
t.setText(str.append(e2.getActionCommand()).toString());
y=Double.parseDouble(t.getText().trim());
}
}
else if(e2.getSource()==button[2])//退格
{
if(!t.getText().trim().equals("0"))
{
if(str.length()!=1)
{
t.setText(str.delete(str.length()-1,str.length()).toString());
}
else
{
t.setText("0");
str.setLength(0);
}
}
y=Double.parseDouble(t.getText().trim());
}
else
{
t.setText(str.append(e2.getActionCommand()).toString());
y=Double.parseDouble(t.getText().trim());
}
}
}
catch(NumberFormatException e){
t.setText("数字格式异常");
}
catch(StringIndexOutOfBoundsException a)
{
t.setText("字符串索引越界");
}}
public static void main(String[] args) {
Calculator1 c=new Calculator1();
}
}这里 StringBuffer str=new StringBuffer("");
和下面的好多个 str.setLength(0); 为什么这样设置就能把TextFile的内容清空呢?跟这个StringBuffer有什么关系呢?
package a;
import java.awt.event.*;
import java.awt.*;
public class Calculator1 extends Frame implements ActionListener {
Frame frame;
Panel panel;
TextField t;
Button[] button;
StringBuffer str=new StringBuffer("");
double x, y;
int z;
Calculator1()
{
frame=new Frame();
frame.setLayout(new BorderLayout());
MenuBar mb=new MenuBar();
Menu menu1=new Menu("编辑(E)");
Menu menu2=new Menu("查看(v)");
Menu menu3=new Menu("帮助(H)");
MenuItem mi1=new MenuItem("复制(C) Ctrl+C ");
MenuItem mi2=new MenuItem("粘贴(V) Ctrl+V ");
MenuItem m2=new MenuItem("退出");
m2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e2)
{
System.exit(0);
}
});
MenuItem mi3=new MenuItem("标准型(T) ");
MenuItem mi4=new MenuItem("科学型(S) ");
MenuItem mi5=new MenuItem("数据分组(I) ");
MenuItem mi6=new MenuItem("帮助主题(H) ");
MenuItem mi7=new MenuItem("关于计算器(A) ");
String s[]={"My","love","退格","CE","C","7","8","9","+/-","sqrt","4","5","6","/","%","1","2","3","-","0","*","1/x",".","+","="};
button=new Button[s.length];
panel=new Panel();
panel.setLayout(new GridLayout(5,5));
t=new TextField("0",27);
t.setEnabled(false);
for(int i=0;i<button.length;i++)
{
button[i]=new Button(s[i]);
button[i].setForeground(Color.blue);
panel.add(button[i]);
}
for(int i=0;i<button.length;i++)
{
button[i].addActionListener(this);
// button[i].setBackground(new Color(194,171,245));
}
button[0].addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e){
button[0].setBackground(Color.cyan);
}
});
button[0].addMouseListener(new MouseAdapter(){
public void mouseExited(MouseEvent e){
// button[0].setBackground());
}});
mb.add(menu1);
mb.add(menu2);
mb.add(menu3);
mb.add(menu1);
mb.add(menu2);
mb.add(menu3);
menu1.add(mi1);
menu1.add(mi2);
menu1.add(m2);
menu2.add(mi3);
menu2.add(mi4);
menu2.add(mi5);
menu3.add(mi6);
menu3.add(mi7);
frame.setMenuBar(mb);
frame.setBounds(300,300,260,370);
frame.add(t,BorderLayout.NORTH);
frame.add(panel,BorderLayout.CENTER);
frame.setBackground(Color.blue);
frame.setResizable(false);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e1) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e2)
{
try{
if(e2.getSource()==button[3])//CE
{
t.setText("0");
str.setLength(0);
}
else if(e2.getSource()==button[4])//C
{
t.setText("0");
str.setLength(0);
}
else if(e2.getSource()==button[8])//+/-
{
x=Double.parseDouble(t.getText().trim());
t.setText(""+(-x));
}
else if(e2.getSource()==button[23])//+
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0); y=0d;
z=0;
}
else if(e2.getSource()==button[18])//-
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0);
y=0d;
z=1;
}
else if(e2.getSource()==button[20])//*
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0);
y=0d;
z=2;
}
else if(e2.getSource()==button[13])// /
{
x=Double.parseDouble(t.getText().trim());
str.setLength(0);
y=0d;
z=3;
}
else if(e2.getSource()==button[24])// =
{
str.setLength(0);
switch(z)
{
case 0 : t.setText(""+(x+y));break;
case 1 : t.setText(""+(x-y));break;
case 2 : t.setText(""+(x*y));break;
case 3 : t.setText(""+(x/y));break;
}
}
else if(e2.getSource()==button[22])// .
{
if(t.getText().trim().indexOf('.')!=-1)
{ }
else
{
if(t.getText().trim().equals("0"))
{
str.setLength(0);
t.setText((str.append("0"+e2.getActionCommand())).toString());
}
else if(t.getText().trim().equals(""))
{
}
else
{
t.setText(str.append(e2.getActionCommand()).toString());
}
}
y=0d;
}
else if(e2.getSource()==button[9])// sqrt
{
x=Double.parseDouble(t.getText().trim());
t.setText("数字格式异常");
if(x<0)
t.setText("负数没有平方根");
else
t.setText(""+Math.sqrt(x));
str.setLength(0);
y=0d;
}
else if(e2.getSource()==button[14])//%
{
x=Double.parseDouble(t.getText().trim());
t.setText(""+(0.01*x));
str.setLength(0);
y=0d;
}
else if(e2.getSource()==button[21])// 1/x
{ x=Double.parseDouble(t.getText().trim());
if(x==0)
{
t.setText("除数不能为零");
}
else
{
t.setText(""+(1/x));
}
str.setLength(0);
y=0d;
}
else
{
if(e2.getSource()==button[19])//0
{
if(t.getText().trim().equals("0"))
{ }
else
{
t.setText(str.append(e2.getActionCommand()).toString());
y=Double.parseDouble(t.getText().trim());
}
}
else if(e2.getSource()==button[2])//退格
{
if(!t.getText().trim().equals("0"))
{
if(str.length()!=1)
{
t.setText(str.delete(str.length()-1,str.length()).toString());
}
else
{
t.setText("0");
str.setLength(0);
}
}
y=Double.parseDouble(t.getText().trim());
}
else
{
t.setText(str.append(e2.getActionCommand()).toString());
y=Double.parseDouble(t.getText().trim());
}
}
}
catch(NumberFormatException e){
t.setText("数字格式异常");
}
catch(StringIndexOutOfBoundsException a)
{
t.setText("字符串索引越界");
}}
public static void main(String[] args) {
Calculator1 c=new Calculator1();
}
}这里 StringBuffer str=new StringBuffer("");
和下面的好多个 str.setLength(0); 为什么这样设置就能把TextFile的内容清空呢?跟这个StringBuffer有什么关系呢?
你就把StringBuffer当做可以动态分配空间就好了,通过append修改,setLength(),可以修改StringBuffer的长度。所以,如果把length变小了,就把多余的字符串截掉。还有一个方法replace 也挺好用的。顾名思义,替换。replace也可以改变 StringBuffer的长度,具体查看api。如果你想清空StringBuffer的内容,用sb.setLength(0)。