java計算器課程設計
⑴ java簡單計算器實驗報告
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class 計算器 extends JFrame implements ActionListener {
private final String[] KEYS = { "7", "8", "9", "÷", "sqrt", "4", "5", "6",
"×", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
private final String[] COMMAND = { "Backspace", "CE", "C" };
private final String[] M = { " ", "MC", "MR", "MS", "M+" };
private JButton keys[] = new JButton[KEYS.length];
private JButton commands[] = new JButton[COMMAND.length];
private JButton m[] = new JButton[M.length];
private JTextField resultText = new JTextField();
private boolean firstDigit = true;
private double resultNum = 0.0;
private String operator = "=";
static double mr;// 記憶的數字
private boolean operateValidFlag = true;
JPanel panel[]=new JPanel[4];
public 計算器(){
super("計算器");
init();
setBackground(Color.LIGHT_GRAY);
setResizable(false);
setLocation(588, 250);
setSize(378,214);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); //窗口不能直接關閉
setVisible(true);
addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e){
if (JOptionPane.showConfirmDialog(null,"確定退出? ", "提示",2)==0){
System.exit(0);
}}});
}
private void init() {
setLayout(null);
for (int i = 0; i < 4; i++) {
panel[i]=new JPanel();
add(panel[i]);
}
panel[0].setLayout(new GridLayout(1,1,3,3));
panel[1].setLayout(new GridLayout(1,3,3,3));
panel[2].setLayout(new GridLayout(5,1,3,3));
panel[3].setLayout(new GridLayout(4,5,3,3));
resultText.setHorizontalAlignment(JTextField.RIGHT);
resultText.setAlignmentX(50);
resultText.setEditable(true);
resultText.setFont(new Font("宋體",Font.PLAIN,19));//設置字體
resultText.setBackground(Color.white);
panel[0].add(resultText);
for (int i = 0; i < KEYS.length; i++) {
keys[i] = new JButton(KEYS[i]);
panel[3].add(keys[i]);
if (i%5-3==0){ keys[i].setForeground(Color.red); }
else{keys[i].setForeground(Color.black);}
keys[i].setVisible(true);
keys[i].setFont(new Font(null,Font.PLAIN,17));//設置字體
keys[i].addActionListener(this);
keys[i].setHorizontalAlignment(keys[i].CENTER);
keys[i].setBackground(new Color(255,236,233));
}
keys[4].setFont(new Font(null,Font.PLAIN,13));//設置字體
keys[19].setForeground(Color.red);
for (int i = 0; i < COMMAND.length; i++) {
commands[i] = new JButton(COMMAND[i]);
panel[1].add(commands[i]);
commands[i].setForeground(Color.red);
commands[i].addActionListener(this);
}
commands[0].setFont(new Font(null,Font.PLAIN,12));//設置字體
for (int i = 0; i < M.length; i++) {
m[i] = new JButton(M[i]);
panel[2].add(m[i]);
m[i].setForeground(Color.red);
m[i].addActionListener(this);
}
panel[0].setBounds(2, 0, 370, 30);
panel[1].setBounds(74, 30, 298, 29);
panel[2].setBounds(2,30, 70, 150);
panel[3].setBounds(74,60, 300, 120);
validate();
}
public void actionPerformed(ActionEvent e) {
String label = e.getActionCommand();
if (label.equals(COMMAND[0])){ //用戶按了"Backspace"鍵
handleBackspace();
} else if (label.equals(COMMAND[1])) { //用戶按了"CE"鍵
resultText.setText("0");
} else if (label.equals(COMMAND[2])){ //用戶按了"C"鍵
handleC();
} else if (label.equals(M[4])){ //用戶按了"M+"鍵
mr=mr+Double.valueOf(resultText.getText()).doubleValue();
if (mr==0.0){m[0].setText("");}
else {m[0].setText("M");}
} else if (label.equals(M[3])){ //用戶按了"MS"鍵
mr=Double.valueOf(resultText.getText()).doubleValue();
if (mr==0.0){m[0].setText("");}
} else if (label.equals(M[2])){ //用戶按了"MR"鍵
resultText.setText(""+mr);
} else if (label.equals(M[1])){ //用戶按了"MC"鍵
mr=0.0;
m[0].setText("");
} else if (label.equals("sqrt")) { //平方根運算
resultNum = Math.sqrt(Double.valueOf(resultText.getText()).doubleValue());
resultText.setText(String.valueOf(resultNum));
} else if (label.equals("%")){ //百分號運算,除以100
resultNum = Double.valueOf(resultText.getText()).doubleValue() / 100;
resultText.setText(String.valueOf(resultNum));
} else if (label.equals("+/-")){ //正數負數運算
resultNum = Double.valueOf(resultText.getText()).doubleValue() * (-1);
resultText.setText(String.valueOf(resultNum));
} else if (label.equals("1/x")) { //倒數運算
resultNum=Double.valueOf(resultText.getText()).doubleValue();
if (resultNum == 0.0){ //操作不合法
operateValidFlag = false;
resultText.setText("零沒有倒數");
} else {
resultNum = 1 / resultNum;
}
resultText.setText(String.valueOf(resultNum));
} else if ("0123456789.".indexOf(label) >= 0) { //用戶按了數字鍵或者小數點鍵
handleNumber(label);
} else { //用戶按了運算符鍵
handleOperator(label);
}
}
private void handleBackspace() { // 處理Backspace鍵被按下的事件
String text = resultText.getText();
int i = text.length();
if (i > 0) { //退格,將文本最後一個字元去掉
text = text.substring(0, i - 1);
if (text.length() == 0) { //如果文本沒有了內容,則初始化計算器的各種值
resultText.setText("0");
firstDigit = true;
operator = "=";
} else { //顯示新的文本
resultText.setText(text);
}
}
}
private void handleNumber(String key) { // 處理數字鍵被按下的事件
if (firstDigit) { //輸入的第一個數字
resultText.setText(key);
} else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)){
//輸入的是小數點,並且之前沒有小數點,則將小數點附在結果文本框的後面
resultText.setText(resultText.getText() + ".");
} else if (!key.equals(".")) { //如果輸入的不是小數點,則將數字附在結果文本框的後面
resultText.setText(resultText.getText() + key);
}
firstDigit = false; //以後輸入的肯定不是第一個數字了
}
private void handleC() { //處理C鍵被按下的事件, 初始化計算器的各種值
resultText.setText("0");
firstDigit = true;
operator = "=";
}
private void handleOperator(String key) { //處理運算符鍵被按下的事件
if (operator.equals("÷")) { //除法運算 ,如果當前結果文本框中的值等於0
if (getNumberFromText() == 0.0){ //操作不合法
operateValidFlag = false;
resultText.setText("除數不能為零");
} else {
resultNum /= getNumberFromText();
}
} else if (operator.equals("+")){ //加法運算
resultNum += getNumberFromText();
} else if (operator.equals("-")){ //減法運算
resultNum -= getNumberFromText();
} else if (operator.equals("×")){ //乘法運算
resultNum *= getNumberFromText();
} else if (operator.equals("=")){ //賦值運算
resultNum = getNumberFromText();
}
if (operateValidFlag) { //雙精度浮點數的運算
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0) {
resultText.setText(String.valueOf(t1));
} else {
resultText.setText(String.valueOf(resultNum));
}
}
operator = key; //運算符等於用戶按的按鈕
firstDigit = true;
operateValidFlag = true;
}
private double getNumberFromText() { // 從結果文本框中獲取數字
double result = 0;
try {
result = Double.valueOf(resultText.getText()).doubleValue();
}
catch (NumberFormatException e){ }
return result;
}
public static void main(String args[]) {
new 計算器();
}
}
⑵ java課程設計:設計一個計算器模擬程序。
簡單,javascript就行頁面上添加一個文本框,下面添加按鈕,加減乘除四個方法。然後就OK了。
⑶ JAVA課程設計--簡易計算器. 求源代碼.
import javax.swing.*;//新的窗口組件包
import java.awt.*;
import java.awt.event.*;
public class Jisuanqi implements ActionListener
{ JFrame jf=new JFrame();
boolean dotExist, operated, equaled; // 幫助運算的布爾變數
double result; // 目前的結果
char lastOperator; // 表示上一運算符
JTextField jtf; // 顯示欄
JButton dot, plus, minus, multi, div, sqrt, equal, change, clear,quyu; // 運算符
JButton[] numbers;
Panel p=new Panel();
// 構造者
public Jisuanqi()
{
jf.setTitle("陳巳偉牌計算器");
// 初始化變數
dotExist = false; // 表示當前的數是否有小數點
operated = false; // 表示任意運算符是否被按下
equaled = false; // 表示等號是否被按下
result = 0;
lastOperator = '?';
// 初始化窗口變數
jtf = new JTextField("0");
jtf.setEditable(false); //設置文本框的可編輯性
jf.setSize(250,200);
jf.setVisible(true);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
dot = new JButton(".");
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("*");
div = new JButton("/");
sqrt = new JButton("√");
equal = new JButton("=");
change= new JButton("±");
clear = new JButton("NC");
quyu=new JButton("%");
p.setLayout(new GridLayout(5,4));
p.add(numbers[1]);
p.add(numbers[2]);
p.add(numbers[3]);
p.add(plus);
p.add(numbers[4]);
p.add(numbers[5]);
p.add(numbers[6]);
p.add(minus);
p.add(numbers[7]);
p.add(numbers[8]);
p.add(numbers[9]);
p.add(multi);
p.add(dot);
p.add(numbers[0]);
p.add(sqrt);
p.add(div);
p.add(equal);
p.add(change);
p.add(clear);
p.add(quyu);
jf.add(jtf,BorderLayout.NORTH);
jf.add(p,BorderLayout.CENTER);
numbers[0].addActionListener(this);
numbers[1].addActionListener(this);
numbers[2].addActionListener(this);
numbers[3].addActionListener(this);
plus.addActionListener(this);
numbers[4].addActionListener(this);
numbers[5].addActionListener(this);
numbers[6].addActionListener(this);
minus.addActionListener(this);
numbers[7].addActionListener(this);
numbers[8].addActionListener(this);
numbers[9].addActionListener(this);
multi.addActionListener(this);
dot.addActionListener(this);
sqrt.addActionListener(this);
div.addActionListener(this);
equal.addActionListener(this);
change.addActionListener(this);
clear.addActionListener(this);
quyu.addActionListener(this);
}
// 對按鈕進行反應的方法
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton)e.getSource();
if (btn == clear)
{
jtf.setText("0");
dotExist = false;
operated = false;
equaled = false;
result = 0;
lastOperator = '?';
}
else if (btn == equal)
{
operate('=');
equaled = true;
}
else if (btn == plus)
{
operate('+');
equaled = false;
}
else if (btn == minus)
{
operate('-');
equaled = false;
}
else if (btn == multi)
{
operate('*');
equaled = false;
}
else if (btn == div)
{
operate('/');
equaled = false;
}
else if (btn==quyu){
operate('%');
equaled=false;
}
else if (btn == change)
{
operate('p');
operate('=');
equaled = true;
}
else if (btn == sqrt)
{
operate('s');
operate('=');
equaled = true;
}
else
{
if (equaled)
result = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i])
{
if (jtf.getText().equals("0"))
jtf.setText("" + i);
else if(! operated)
jtf.setText(jtf.getText() + i);
else
{
jtf.setText("" + i);
operated = false;
}
}
if (btn == dot && ! dotExist)
{
jtf.setText(jtf.getText() + ".");
}
}
}
// 進行運算的方法
private void operate(char operator)
{
double currentNumber = Double.valueOf(jtf.getText()).doubleValue();
if (lastOperator == '?')
result = currentNumber;
else if (lastOperator == '+')
result += currentNumber;
else if (lastOperator == '-')
result -= currentNumber;
else if (lastOperator == '*')
result *= currentNumber;
else if (lastOperator == '/')
result /= currentNumber;
else if(lastOperator=='%')
result %=currentNumber;
else if (lastOperator == 'p')
result *= -1;
else if (lastOperator == 's')
result = Math.sqrt(currentNumber);
else if (lastOperator == '=' && equaled)
result = currentNumber;
jtf.setText("" + result);
operated = true;
lastOperator = operator;
}
public static void main(String[] args)
{new Jisuanqi();<br> <br> }
}
⑷ java計算器課設
我有,給你一個
import java.awt.*;
import java.awt.event.*;
class Calculator extends WindowAdapter implements ActionListener
{
private double result=0,data1=0,radixPointDepth=1;//小數點位數
private boolean radixPointIndicate=false,resultIndicate=false;//小數點和運算結果
private char prec='+';
private Frame f;
private TextField tf;
private Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17;
private Panel p;
static public void main(String args[])
{
Calculator de=new Calculator();
de.go();
}
public void go()
{
f=new Frame("計算器");
p=new Panel();
p.setLayout(new GridLayout(4,4));
tf=new TextField(30);
b1=new Button("7");
b2=new Button("8");
b3=new Button("9");
b4=new Button("+");
b5=new Button("4");
b6=new Button("5");
b7=new Button("6");
b8=new Button("-");
b9=new Button("1");
b10=new Button("2");
b11=new Button("3");
b12=new Button("*");
b13=new Button("0");
b14=new Button(".");
b15=new Button("=");
b16=new Button("/");
b17=new Button("清零");
f.add(tf,"North");
f.add(p,"Center");
f.add(b17,"South");
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
p.add(b6);
p.add(b7);
p.add(b8);
p.add(b9);
p.add(b10);
p.add(b11);
p.add(b12);
p.add(b13);
p.add(b14);
p.add(b15);
p.add(b16);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b10.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b14.addActionListener(this);
b15.addActionListener(this);
b16.addActionListener(this);
b17.addActionListener(this);
f.addWindowListener(this);
f.setSize(250,190);
f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String s;
s=e.getActionCommand();
switch(s.charAt(0))
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': //按了「0-9」,就執行下面
if(resultIndicate)
{
result=0;
data1=0;
prec='+';
}
Integer Int1=new Integer(s);
if(radixPointIndicate)
{
radixPointDepth=radixPointDepth/10;
data1=data1+(Int1.intValue())*radixPointDepth;
}
else
{
data1=data1*10+(Int1.intValue());
}
Double displayNumber=new Double(data1);
tf.setText(displayNumber.toString());
resultIndicate=false;
break;
case '+':
case '-':
case '*':
case '/':
case '=':
if(s.charAt(0)!='='&&resultIndicate)
{
prec=s.charAt(0);
resultIndicate=false;
}
else
{
switch(prec)
{
case '+':
result=result+data1;
break;
case '-':
result=result-data1;
break;
case '*':
result=result*data1;
break;
case '/':
result=result/data1;
break;
}
}
radixPointIndicate=false;
radixPointDepth=1;
displayNumber=new Double(result);
tf.setText(displayNumber.toString());
if(s.charAt(0)!='=')
{
data1=0;
prec=s.charAt(0);
}
else
{
resultIndicate=true;
}
break;
case '.':
radixPointIndicate=true;
break;
}
if(s.equals("清零"))
{
result=0;
data1=0;
radixPointDepth=1;
radixPointIndicate=false;
tf.setText("0.0");
}
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
給分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
⑸ 急求java計算器 課程設計報告
Java課程設計報告
題 目: 計算器
院(系):xxx學院
年級專業: xxx班
學生姓名: xxx
指導老師: xx老師
開始時間: 200x-xx-xx
完成時間: 200x-xx-xx
目 錄
1. 摘 要
2. 概要設計
3. 詳細設計
4. 測試分析
5. 參考文獻
一、摘 要
本計算器可以進行簡單的四則運算(加、減、乘、除)但僅限於十進制下,還可以進行(八進制,十進制,十六進制)之間的相互轉換,八進制最多可以輸入19位數,十進制最多可以輸入18位數,十六進制最多可以輸入14位數,backspace表示退格, clear表示初始化,在window下直接運行(Jsp2003.bat)即可,界面為灰白對稱。
二、概要設計
(1) 自定義類說明
**********************************************************
* 類名: This_number_too_big *
* 作用: 自定義的異常類,用來處理計算結果溢出 *
* 繼承的父類: Exception類 *
* 實現的介面: 沒有 *
**********************************************************
class This_number_too_big extends Exception
{
}//自定義的一個結果溢出異常類
**********************************************************
* 類名: Jsp2003 *
* 作用: 主類。 *
* 繼承的父類: Frame類 *
* 實現的介面: ItemListener類,ActionListener類 *
**********************************************************
class Jsp2003 extends Frame implements ItemListener,ActionListener
{
public int number=0,length=18;
//number是用來記錄輸入的數字個數,
//length是用來設置在不同進制下允許輸入的最多數字位數,默認為十進制 public char mark='n';
//設置運算符號為沒有即為『n』,它的值是『+』『-』『*』『/』
public double data=0;
//設置運算數據為零
public char ch;
//用來臨時存放所按按鈕的第一個字元
public boolean Refresh=false;
//設置lab是否要在輸入數據的時候刷新,初始為否
主要方法說明:
------------------------------------------------------------------------------------------------
//用來處理按了運算符後的計算-
public void js() throws This_number_too_big //指定由method拋出異常
{if (mark=='n') //沒有運算符
{mark=ch; //,則設置運算符為剛剛輸入的字元,
data=Double.parseDouble(lab.getText());//則設置運算數據為lab的值
Refresh=true;//則設置下一次輸入的時候要刷新lab
}
else //如果採用的是連續運算(即沒有使用『=』號)則運行下面的語句
{switch (mark) //根據運算符計算結果,並把結果保存到data
{ case '+': data+=Double.parseDouble(lab.getText()); break;
case '-': data-=Double.parseDouble(lab.getText()); break;
case '*': data*=Double.parseDouble(lab.getText()); break;
case '/': data/=Double.parseDouble(lab.getText()); break;}
lab.setText(Double.toString(data)); //顯示運算結果
mark=ch;//設置運算符為剛剛按下的運算符
Refresh=true;//則設置下一次輸入的時候要刷新lab
number=lab.getText().length();//設置輸入的字元個數
// System.out.println(lab.getText());//用來調試用的
if (data>Double.MAX_VALUE)
//如果data超過double類型的最大值則拋出自定義的一個異常類
{throw new This_number_too_big(); }
}
}//end js() method
----------------------------------------------------------------------------------------------------
public void enter()//處理輸入字元
{if(Refresh==true)
//如果已經設置了 運算符則在下一次輸入數據的時候要把以前lab的內容清除掉
{lab.setText("0"); number=0; Refresh=false;}
if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)
//如果lab的內容為0則,lab的內容將被所輸入的字元代替,
//否則直接在lab的內容後面加上所輸入的字元
{lab.setText(Character.toString(ch)); number++;}
else
if(number<length)
{number++;lab.setText(lab.getText()+ch);}
}//end enter() method
--------------------------------------------------------------------------------------------------------
//八進制或十六進制轉換成十進制I
public String goto_10(String s,long l)
//參數s: 是要轉換的字元串,由於輸入的控制,保證了字元串的合法性;
//參數l: 使用來設置是將8進制還是16進制轉換成10進制,它的有效值為8或16;
{ String str=s; //用來轉換的字元串
long j=l; //表示進制
long lg=0,jing=1;//lg用來記錄權乘和,jing用來記錄位權
char cha;//臨時記錄要轉換的字元
for(int i=1;i<=str.length();i++)
{ cha=str.charAt(str.length()-i);
switch(cha)
{ case '1': lg=lg+1*jing;break;
case '2': lg=lg+2*jing;break;
case '3': lg=lg+3*jing;break;
case '4': lg=lg+4*jing;break;
case '5': lg=lg+5*jing;break;
case '6': lg=lg+6*jing;break;
case '7': lg=lg+7*jing;break;
case '8': lg=lg+8*jing;break;
case '9': lg=lg+9*jing;break;
case 'A': lg=lg+10*jing;break;
case 'B': lg=lg+11*jing;break;
case 'C': lg=lg+12*jing;break;
case 'D': lg=lg+13*jing;break;
case 'E': lg=lg+14*jing;break;
case 'F': lg=lg+15*jing;break;}
jing*=j; //位權升一級,為下次使用做好准備
}
return Long.toString(lg);
}//end String goto_10() method
}
(2)程序流程圖
三、詳細設計
import java.awt.*;
import java.awt.event.*;
class This_number_too_big extends Exception
{}//自定義的一個結果溢出異常類
class Jsp2003 extends Frame implements ItemListener,ActionListener {
public Jsp2003() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
static Jsp2003 mainFrame = new Jsp2003();
static Label lab=new Label("0");
static Panel pnl1=new Panel(new GridLayout(4,3,3,3));
static Panel pnl2=new Panel(new GridLayout(4,1,3,3));
static Panel pnl3=new Panel(new GridLayout(1,2,3,3));
static Panel pnl4=new Panel(new GridLayout(6,1,3,3));
static Button bt9=new Button("9");
static Button bt8=new Button("8");
static Button bt7=new Button("7");
static Button bt6=new Button("6");
static Button bt5=new Button("5");
static Button bt4=new Button("4");
static Button bt3=new Button("3");
static Button bt2=new Button("2");
static Button bt1=new Button("1");
static Button bt0=new Button("0");
static Button btdot=new Button(".");
static Button btequ=new Button("=");
static Button btadd=new Button("+");
static Button btsub=new Button("-");
static Button btmul=new Button("*");
static Button btdev=new Button("/");
static Button btA=new Button("A");
static Button btB=new Button("B");
static Button btC=new Button("C");
static Button btD=new Button("D");
static Button btE=new Button("E");
static Button btF=new Button("F");
static Checkbox ckb8=new Checkbox("八進制");
static Checkbox ckb10=new Checkbox("十進制");
static Checkbox ckb16=new Checkbox("十六進制");
static Button btc=new Button("clear");
static Button btt=new Button("backspace");
public int number=0,length=18;
//number是用來記錄輸入的數字個數,length是用來設置在不同進制下允許輸入的最多數字位數,默認為十進制
public char mark='n'; //設置運算符號為沒有即為『n』,它的值是『+』『-』『*』『/』
public double data=0; //設置運算數據為零
public char ch; //用來臨時存放所按按鈕的第一個字元
public boolean Refresh=false;//設置lab是否要在輸入數據的時候刷新,初始為否
public static void main(String args[]) {
System.out.println("Starting Jsp2003...");
lab.setAlignment(Label.RIGHT);
lab.setBackground(Color.lightGray);
lab.setForeground(Color.BLUE);
lab.setFont(new Font("Serief",Font.BOLD,18));
lab.setBounds(14,33,216,40);
mainFrame.add(lab);
CheckboxGroup grp=new CheckboxGroup();
ckb8.setCheckboxGroup(grp);
ckb10.setCheckboxGroup(grp);
ckb16.setCheckboxGroup(grp);
ckb8.setBounds(14,75,55,25);
ckb10.setBounds(69,75,55,25);
ckb16.setBounds(124,75,65,25);
ckb8.setState(false);
ckb10.setState(true);
ckb16.setState(false);
mainFrame.add(ckb8);
mainFrame.add(ckb10);
mainFrame.add(ckb16);
pnl1.setBounds(14,140,120,150);
pnl2.setBounds(144,140,40,150);
pnl3.setBounds(14,100,170,36);
pnl4.setBounds(190,100,40,190);
pnl1.add(bt7);
pnl1.add(bt8);
pnl1.add(bt9);
pnl1.add(bt4);
pnl1.add(bt5);
pnl1.add(bt6);
pnl1.add(bt1);
pnl1.add(bt2);
pnl1.add(bt3);
pnl1.add(bt0);
pnl1.add(btdot);
pnl1.add(btequ);
pnl2.add(btadd);
pnl2.add(btsub);
pnl2.add(btmul);
pnl2.add(btdev);
pnl3.add(btt);
pnl3.add(btc);
pnl4.add(btA);
pnl4.add(btB);
pnl4.add(btC);
pnl4.add(btD);
pnl4.add(btE);
pnl4.add(btF);
btA.enable(false);
btB.enable(false);
btC.enable(false);
btD.enable(false);
btE.enable(false);
btF.enable(false);
mainFrame.add(pnl1);
mainFrame.add(pnl2);
mainFrame.add(pnl3);
mainFrame.add(pnl4);
mainFrame.setResizable(false);
mainFrame.setLayout(null);
mainFrame.setSize(240,300 );
mainFrame.setTitle("計算器");
mainFrame.setVisible(true);
ckb8.addItemListener(mainFrame);
ckb10.addItemListener(mainFrame);
ckb16.addItemListener(mainFrame);
//把事件聆聽者向各個組鍵注冊
bt1.addActionListener(mainFrame);
bt2.addActionListener(mainFrame);
bt3.addActionListener(mainFrame);
bt4.addActionListener(mainFrame);
bt5.addActionListener(mainFrame);
bt6.addActionListener(mainFrame);
bt7.addActionListener(mainFrame);
bt8.addActionListener(mainFrame);
bt9.addActionListener(mainFrame);
bt0.addActionListener(mainFrame);
btadd.addActionListener(mainFrame);
btsub.addActionListener(mainFrame);
btmul.addActionListener(mainFrame);
btdev.addActionListener(mainFrame);
btt.addActionListener(mainFrame);
btc.addActionListener(mainFrame);
btdot.addActionListener(mainFrame);
btequ.addActionListener(mainFrame);
btA.addActionListener(mainFrame);
btB.addActionListener(mainFrame);
btC.addActionListener(mainFrame);
btD.addActionListener(mainFrame);
btE.addActionListener(mainFrame);
btF.addActionListener(mainFrame);
}// end main() mothed
//---------------------------------------------
//checkbox 事件的處理
public void itemStateChanged(ItemEvent e)
{ mark='n';
Refresh=false;
//規定當進制轉換時以前輸入的運算符失效
if (ckb8.getState()==true)
{ btA.enable(false);
btB.enable(false);
btC.enable(false);
btD.enable(false);
btE.enable(false);
btF.enable(false);
bt9.enable(false);
bt8.enable(false);
btdot.enable(false);
btadd.enable(false);
btmul.enable(false);
btsub.enable(false);
btdev.enable(false);
btequ.enable(false);
//在八進制的情況下對有些按件的管理
if(length==18) { lab.setText(goto10_8(lab.getText()));
number=lab.getText().length();
}
if(length==14) { lab.setText(goto_10(lab.getText(),16L));
lab.setText(goto10_8(lab.getText()));
number=lab.getText().length();
}
//將其他進制轉換成八進制
length=19;
//在八進制下允許輸入數字個數最多為19位
}
if(ckb10.getState()==true)
{ btA.enable(false);
btB.enable(false);
btC.enable(false);
btD.enable(false);
btE.enable(false);
btF.enable(false);
bt9.enable(true);
bt8.enable(true);
btdot.enable(true);
btadd.enable(true);
btmul.enable(true);
btsub.enable(true);
btdev.enable(true);
btequ.enable(true);
//在十進制的情況下對有些按件的管理
if(length==19) { lab.setText(goto_10(lab.getText(),8L));
number=lab.getText().length();}
if(length==14) { lab.setText(goto_10(lab.getText(),16L));
number=lab.getText().length();}
//進制轉換成十進制
length=18;
//在十進制下允許輸入數字個數最多為18位
}
if(ckb16.getState()==true)
{ btA.enable(true);
btB.enable(true);
btC.enable(true);
btD.enable(true);
btE.enable(true);
btF.enable(true);
bt9.enable(true);
bt8.enable(true);
btdot.enable(false);
btadd.enable(false);
btmul.enable(false);
btsub.enable(false);
btdev.enable(false);
btequ.enable(false);
//在十六進制的情況下對有些按件的管理
if(length==18) { lab.setText(goto10_16(lab.getText()));
number=lab.getText().length();}
if(length==19) { lab.setText(goto_10(lab.getText(),8L));
lab.setText(goto10_16(lab.getText()));
number=lab.getText().length();}
//將其他進制轉換成十六進制
length=14;
//在十六進制下允許輸入數字個數最多為14位
}
}//end itemStateChanged(ItemEvent e) method
//------------------------------------------------------------
//按鈕事件的處理
public void actionPerformed(ActionEvent m)
{
Button btn=(Button) m.getSource();
ch=btn.getLabel().charAt(0);
switch (ch)
{ case 'c': {lab.setText("0"); number=0; mark='n'; Refresh=false;}break;//初始化
case '1': enter(); break;
case '2': enter(); break;
case '3': enter(); break;
case '4': enter(); break;
case '5': enter(); break;
case '6': enter(); break;
case '7': enter(); break;
case '8': enter(); break;
case '9': enter(); break;
case '0': {if(Refresh==true) { lab.setText("0"); number=0; Refresh=false; }
if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)
break;
if(number<length)
{number++;lab.setText(lab.getText()+ch);} else break;
} break;
case 'A': enter(); break;
case 'B': enter(); break;
case 'C': enter(); break;
case 'D': enter(); break;
case 'E': enter(); break;
case 'F': enter(); break;
case '.': {if(Refresh==true) {lab.setText("0"); number=0; Refresh=false;}
if(lab.getText().indexOf('.')== -1)
{number++;lab.setText(lab.getText()+ch);}
else
break;
}
break;
case 'b': {if(number==0) break;
else
{if(--number==0) {lab.setText("0"); number=0;}
else
{if (number!=1) lab.setText(lab.getText().substring(0,number));
else
lab.setText(Character.toString(lab.getText().charAt(0)));}
}
}break;
case '+': try
{ js();}
catch(This_number_too_big e)
{lab.setText("0"); number=0; mark='n';
Refresh=false; System.out.println("The number is too big");} break;
//如果出現異常則初始化效果如同clear鍵
case '-': try
{ js();}
catch(This_number_too_big e)
{lab.setText("0"); number=0; mark='n';
Refresh=false; System.out.println("The number is too big");} break;
//如果出現異常則初始化效果如同clear鍵
case '*': try
{ js();}
catch(This_number_too_big e)
{lab.setText("0"); number=0; mark='n';
Refresh=false; System.out.println("The number is too big");} break;
//如果出現異常則初始化效果如同clear鍵
case '/': try
{ js();}
catch(This_number_too_big e)
{lab.setText("0"); number=0; mark='n';
Refresh=false; System.out.println("The number is too big");} break;
//如果出現異常則初始化效果如同clear鍵
case '=': try
{ js();}
catch(This_number_too_big e)
{lab.setText("0"); number=0; mark='n';
Refresh=false; System.out.println("The number is too big");} break;
//如果出現異常則初始化效果如同clear鍵
}
}//end actionPerformed(ActionEvent e) method
//八進制或十六進制轉換成十進制I
//-------------------------------------Infinity
public String goto_10(String s,long l)
//參數s: 是要轉換的字元串,由於輸入的控制,保證了字元串的合法性;
//參數l: 使用來設置是將8進制還是16進制轉換成10進制,它的有效值為8或16;
{
String str=s; //用來轉換的字元串
long j=l; //表示進制
long lg=0,jing=1;//lg用來記錄權乘和,jing用來記錄位權
char cha;//臨時記錄要轉換的字元
for(int i=1;i<=str.length();i++)
{
cha=str.charAt(str.length()-i);
switch(cha)
{
case '1': lg=lg+1*jing;break;
case '2': lg=lg+2*jing;break;
case '3': lg=lg+3*jing;break;
case '4': lg=lg+4*jing;break;
case '5': lg=lg+5*jing;break;
case '6': lg=lg+6*jing;break;
case '7': lg=lg+7*jing;break;
case '8': lg=lg+8*jing;break;
case '9': lg=lg+9*jing;break;
case 'A': lg=lg+10*jing;break;
case 'B': lg=lg+11*jing;break;
case 'C': lg=lg+12*jing;break;
case 'D': lg=lg+13*jing;break;
case 'E': lg=lg+14*jing;break;
case 'F': lg=lg+15*jing;break;}
jing*=j; //位權升一級,為下次使用做好准備
}
return Long.toString(lg);
}//end String goto_10() method
//十進制轉換成十六進制
//-------------------------------------
public String goto10_16(String s)
//參數s: 是要轉換的字元串,由於輸入的控制,保證了字元串的合法性;
{ String str=s; //用來轉換的字元串
String st=new String();//用來記錄16進制值的字元串
long ch; //每次取余有的值
int k; //將每次取余有的值轉換成整形,用來選擇轉換的16進制字元
long lg;//用來轉換的10進制數
if(str.charAt(0)=='-') //如果有負號則出去負號
str=str.substring(1,str.length()-1);
if(str.indexOf('E')!= -1)//如果是科學計數值則出去小數點和E後面的數
str=str.charAt(0)+str.substring(2,str.indexOf('E'));
if (str.indexOf('.')!= -1)//如果有小數點則出去小數點及小數點後面的內容
str=str.substring(0,str.indexOf('.'));
lg=Long.parseLong(str);//將簡化的字元串轉化為長整形給lg
while (lg>=16)
{ ch=lg%16;
k=(int)ch;
switch (k)
{case 10: st="A"+st;break;
case 11: st="B"+st;break;
case 12: st="C"+st;break;
case 13: st="D"+st;break;
case 14: st="E"+st;break;
case 15: st="F"+st;break;
default: st=Long.toString(ch)+st;
}
lg=lg/16;
}
k=(int)lg;
switch (k)
{case 10: st="A"+st;break;
case 11: st="B"+st;break;
case 12: st="C"+st;break;
case 13: st="D"+st;break;
case 14: st="E"+st;break;
case 15: st="F"+st;break;
default: st=Long.toString(lg)+st;
}
return st;
}//end goto10_16() method
//-----------------------------------------------
//十進制轉換成八進制?
public String goto10_8(String s)
//參數s: 是要轉換的字元串,由於輸入的控制,保證了字元串的合法性;
{ String str=s;
String st=new String();
long j=8,ch;
long lg;
if(str.charAt(0)=='-') //如果有負號則出去負號
str=str.substring(1,str.length()-1);
if(str.indexOf('E')!= -1)//如果是科學計數值則出去小數點和E後面的數
str=str.charAt(0)+str.substring(2,str.indexOf('E'));
if (str.indexOf('.')!= -1)//如果有小數點則出去小數點及小數點後面的內容
str=str.substring(0,str.indexOf('.'));
lg=Long.parseLong(str);
while (lg>=j)
{ ch=lg%j;
st=Long.toString(ch)+st;
lg=lg/j;
}
st=Long.toString(lg)+st;
return st;
}//end goto10_8() method
//--------------------------------
//輸入字元
public void enter()
{if(Refresh==true)
//如果已經設置了 運算符則在下一次輸入數據的時候要把以前lab的內容清除掉
{lab.setText("0"); number=0; Refresh=false;}
if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)
//如果lab的內容為0則,lab的內容將被所輸入的字元代替,否則直接在lab的內容後面加上所輸入的字元
{lab.setText(Character.toString(ch)); number++;}
else
if(number<length)
{number++;lab.setText(lab.getText()+ch);}
}//end enter() method
//-------------------------------------
//用來處理按了運算符後的計算-
public void js() throws This_number_too_big //指定由method拋出異常
{if (mark=='n') //沒有運算符
{mark=ch; //,則設置運算符為剛剛輸入的字元,
data=Double.parseDouble(lab.getText());//則設置運算數據為lab的值
Refresh=true;//則設置下一次輸入的時候要刷新lab
}
else //如果採用的是連續運算(即沒有使用『=』號)則運行下面的語句
{switch (mark) //根據運算符計算結果,並把結果保存到data
{ case '+': data+=Double.parseDouble(lab.getText()); break;
case '-': data-=Double.parseDouble(lab.getText()); break;
case '*': data*=Double.parseDouble(lab.getText()); break;
case '/': data/=Double.parseDouble(lab.getText()); break;}
lab.setText(Double.toString(data)); //顯示運算結果
mark=ch;//設置運算符為剛剛按下的運算符
Refresh=true;//則設置下一次輸入的時候要刷新lab
number=lab.getText().length();//設置輸入的字元個數
// System.out.println(lab.getText());//用來調試用的
if (data>Double.MAX_VALUE)
//如果data超過double類型的最大值則拋出自定義的一個異常類
{throw new This_number_too_big(); }
}
}//end js() method
//---------------------------
//
public void answer() throws This_number_too_big //指定由method拋出異常
{if (mark=='n')
{}
else
{switch (mark)
{case '+': data+=Double.parseDouble(lab.getText()); break;
case '-': data-=Double.parseDouble(lab.getText()); break;
case '*': data*=Double.parseDouble(lab.getText()); break;
case '/': data/=Double.parseDouble(lab.getText()); break;}
lab.setText(Double.toString(data));
mark='n';}
if (data>Double.MAX_VALUE) //如果data超過double類型的最大值則拋出自定義的一個異常類
{throw new This_number_too_big();}
Refresh=false;
number=lab.getText().length();
}//end answer() method
//---------------------------
}//end class Jsp2003
4. 測試分析
(1)程序運行情況:
程序正常的響應按鈕事件,輸入的數值長度受變數length的限定,進行混合四則運算的時候,結果如果不是很大,可以正常顯示,但如果結果很大,就可能採用科學記數方式,這樣帶來了進制轉換時的麻煩,需要特殊的處理科學記數里的E ,當結果太大的時候,有可能超出可能表示的最大值,(結果溢出),這個時候就要對結果進行必要的異常處理,我在輸出結果的方法內設置if 語句,如果結果大於某一個值就拋出一個This_number_too_big 類型的類,再使用try-catch,捕捉輸出結果的方法拋出的異常對象。然後進行,重製歸零的處理。
(2)程序異常處理:
當結果超出Double.MAX_VALUE時,將拋出一個This_number_too_big 類的異常對象,這個是我自定義的一個異常類它繼承自Exception 類,然後使用try-catch去捕捉這個異常,異常的處理如下:
try
{ js();}
catch(This_number_too_big e)
{
lab.setText("0");
number=0;
mark='n';
Refresh=false;
System.out.println("The number is too big");
} //如果出現異常則初始化效果如同clear鍵
五、參考文獻
⑹ 三、課程設計內容 題目:編寫簡易計算器 仿照Windows自帶的計算器編寫一個Java簡易計算器,
public class PrivateOverride {
private void f(){
System.out.println("private f()");
}
public static void main(String[] args){
PrivateOverride po = new Derived();
po.f();
}
}
class Derived extends PrivateOverride{
public void f(){
System.out.println("public f()");
}
}
⑺ 計算機課程設計 用JAVA做計算器
聯系我嘛,
這個沒什麼問題。
就是用JFrame嘛?
⑻ java 計算器課程設計報告
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;//導包
class MyClass extends JFrame
//創建一個MyClass類繼承JFrame框架的窗口類,
//也就是說JFrame里有的功能MyClass都能實現
{
a1=new JLabel("第一個數");
//創建一個顯示「第一個數」的標簽
JLabel a2=new JLabel("第二個數");
JLabel a3=new JLabel("運算結果");
JTextField b1=new JTextField(5);
//創建一個文本框、默認長度為5,用來輸入運算數字,當然也可以默認為空
JTextField b2=new JTextField(5);
JTextField b3=new JTextField(5);
//創建一個用於顯示運算結果的標簽,也可以創建一個標簽來顯示
JButton a=new JButton("加");
//創建一個用於加法計算的按鈕,點擊時進行加法運算
JButton b=new JButton("減");
JButton c=new JButton("乘");
JButton d=new JButton("除");
JPanel jp1=new JPanel();//創建一個面板,用來放控制項
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
MyClass()//構造函數,用來初始化的
{
setLayout(new GridLayout(3,1));//添加一個四行四列的布局管理器
jp1.setLayout(new FlowLayout());//設置JP1面板為流式布局管理器
jp1.setLayout(new FlowLayout());
//將a1,b1,a2,b2四個控制項添加到jp1面板中
jp1.add(a1);
jp1.add(b1);
jp1.add(a2);
jp1.add(b2);
jp1.add(a3);
//將a,b,c,d四個控制項添加到jp2面板中
jp2.add(a);
jp2.add(b);
jp2.add(c);
jp2.add(d);
jp3.add(a3);
jp3.add(b3);
//將jp1,jp2,jp3三個面板添加到窗口中
add(jp1);
add(jp3);
add(jp2);
Object e;
a.addActionListener(new ActionListener()
//創建一個匿名的事件監聽器
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
double x=Double.valueOf(b1.getText().toString());
//獲取第一個輸入數,並將其由String型轉換成double型
double y=Double.valueOf(b2.getText().toString());
//獲取第二個輸入數,並將其由String型轉換成double型
b3.setText(""+(x+y));
//將運算結果在b3這個文本框中顯示
}
});
b.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
double x=Double.valueOf(b1.getText().toString());
double y=Double.valueOf(b2.getText().toString());
b3.setText(""+(x-y));
}
});
c.addActionListener(new ActionListener()//創建一個匿名的事件監聽器
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
double x=Double.valueOf(b1.getText().toString());
double y=Double.valueOf(b2.getText().toString());
b3.setText(""+(x*y));
}
});
d.addActionListener(new ActionListener()//創建一個匿名的事件監聽器
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
double x=Double.valueOf(b1.getText().toString());
double y=Double.valueOf(b2.getText().toString());
//因為0不能做除數,所以在這里需要進行判斷
if(y==0)
{
b3.setText("錯誤");
}
else
{
b3.setText(""+(x/y));
}
}
});
//下面的是設置窗口的屬性
this.setTitle("計算器");//設置窗口的標題
//this.setSize(400,400);//設置窗口的大小,也可以改成this.pack()
this.pack();
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//設置關閉屬性
this.setVisible(true);//設置窗口的可見性
}
public static void main(String[] args)//主函數
{
new MyClass();
}
}
⑼ java課程設計---計算器 要求如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.io.*;
public class CalculatorWindow extends JFrame implements ActionListener{
NumberButton numberButton[];
OperationButton operationButton[];
JButton 小數點操作,正負號操作,退格操作,等號操作,清零操作,sin;
JTextField resultShow; //顯示計算結果
JTextField showComputerProcess; //顯示當前計算過程
JTextArea saveComputerProcess; //顯示計算步驟
JButton saveButton,Button,clearButton;
LinkedList<String> list; //鏈表用來存放第一個運算數、運算符號和第二個運算數
HandleDigit handleDigit; //負責處理ActionEvent事件
HandleOperation handleOperation ;
HandleBack handleBack;
HandleClear handleClear;
HandleEquality handleEquality;
HandleDot handleDot;
HandlePOrN handlePOrN;
HandleSin handleSin;
public CalculatorWindow(){
setTitle("計算器");
JPanel panelLeft,panelRight;
list=new LinkedList<String>();
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimesRoman",Font.BOLD,16));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
resultShow.setEditable(false);
resultShow.setBackground(Color.white);
showComputerProcess=new JTextField();
showComputerProcess.setHorizontalAlignment(JTextField.CENTER);
showComputerProcess.setFont(new Font("Arial",Font.BOLD,16));
showComputerProcess.setBackground(Color.cyan);
showComputerProcess.setEditable(false);
saveComputerProcess=new JTextArea();
saveComputerProcess.setEditable(false);
saveComputerProcess.setFont(new Font("宋體",Font.PLAIN,16));
numberButton=new NumberButton[10];
handleDigit=new HandleDigit(list,resultShow,showComputerProcess);
for(int i=0;i<=9;i++){
numberButton[i]=new NumberButton(i);
numberButton[i].setFont(new Font("Arial",Font.BOLD,20));
numberButton[i].addActionListener(handleDigit);
}
operationButton=new OperationButton[4];
handleOperation=new HandleOperation(list,resultShow,
showComputerProcess,saveComputerProcess);
String 運算符號[]={"+","-","*","/"};
for(int i=0;i<4;i++){
operationButton[i]=new OperationButton(運算符號[i]);
operationButton[i].setFont(new Font("Arial",Font.BOLD,20));
operationButton[i].addActionListener(handleOperation);
}
小數點操作=new JButton(".");
handleDot=new HandleDot(list,resultShow,showComputerProcess);
小數點操作.addActionListener(handleDot);
正負號操作=new JButton("+/-");
handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess);
正負號操作.addActionListener(handlePOrN);
等號操作=new JButton("=");
handleEquality=new HandleEquality(list,resultShow,
showComputerProcess,saveComputerProcess);
等號操作.addActionListener(handleEquality);
sin=new JButton("sin");
handleSin=new HandleSin(list,resultShow,
showComputerProcess,saveComputerProcess);
sin.addActionListener(handleSin);
退格操作=new JButton("退格");
handleBack=new HandleBack(list,resultShow,showComputerProcess);
退格操作.addActionListener(handleBack);
清零操作=new JButton("C");
handleClear=new HandleClear(list,resultShow,showComputerProcess);
清零操作.addActionListener(handleClear);
清零操作.setForeground(Color.red);
退格操作.setForeground(Color.red);
等號操作.setForeground(Color.red);
sin.setForeground(Color.blue);
正負號操作.setForeground(Color.blue);
小數點操作.setForeground(Color.blue);
panelLeft=new JPanel();
panelRight=new JPanel();
panelLeft.setLayout(new BorderLayout());
JPanel centerInLeft=new JPanel();
panelLeft.add(resultShow,BorderLayout.NORTH);
panelLeft.add(centerInLeft,BorderLayout.CENTER);
centerInLeft.setLayout(new GridLayout(4,5));
centerInLeft.add(numberButton[1]);
centerInLeft.add(numberButton[2]);
centerInLeft.add(numberButton[3]);
centerInLeft.add(operationButton[0]);
centerInLeft.add(清零操作);
centerInLeft.add(numberButton[4]);
centerInLeft.add(numberButton[5]);
centerInLeft.add(numberButton[6]);
centerInLeft.add(operationButton[1]);
centerInLeft.add(退格操作);
centerInLeft.add(numberButton[7]);
centerInLeft.add(numberButton[8]);
centerInLeft.add(numberButton[9]);
centerInLeft.add(operationButton[2]);
centerInLeft.add(sin);
centerInLeft.add(numberButton[0]);
centerInLeft.add(正負號操作);
centerInLeft.add(小數點操作);
centerInLeft.add(operationButton[3]);
centerInLeft.add(等號操作);
panelRight.setLayout(new BorderLayout());
panelRight.add(showComputerProcess,BorderLayout.NORTH);
saveButton=new JButton("保存");
Button=new JButton("復制");
clearButton=new JButton("清除");
saveButton.setToolTipText("保存計算過程到文件");
Button.setToolTipText("復制選中的計算過程");
clearButton.setToolTipText("清除計算過程");
saveButton.addActionListener(this);
Button.addActionListener(this);
clearButton.addActionListener(this);
panelRight.add(new JScrollPane(saveComputerProcess),BorderLayout.CENTER);
JPanel southInPanelRight=new JPanel();
southInPanelRight.add(saveButton);
southInPanelRight.add(Button);
southInPanelRight.add(clearButton);
panelRight.add(southInPanelRight,BorderLayout.SOUTH);
JSplitPane split=new JSplitPane
(JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight);
add(split,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setBounds(100,50,528,258);
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==Button)
saveComputerProcess.();
if(e.getSource()==clearButton)
saveComputerProcess.setText(null);
if(e.getSource()==saveButton){
JFileChooser chooser=new JFileChooser();
int state=chooser.showSaveDialog(null);
File file=chooser.getSelectedFile();
if(file!=null&&state==JFileChooser.APPROVE_OPTION){
try{ String content=saveComputerProcess.getText();
StringReader read=new StringReader(content);
BufferedReader in= new BufferedReader(read);
FileWriter outOne=new FileWriter(file);
BufferedWriter out= new BufferedWriter(outOne);
String str=null;
while((str=in.readLine())!=null){
out.write(str);
out.newLine();
}
in.close();
out.close();
}
catch(IOException e1){}
}
}
}
public static void main(String args[]){
new CalculatorWindow();
}
}