---
# System prepended metadata

title: Java自學紀錄 - 計算機實作
tags: [Java]

---

###### tags: `Java`
> [name=王灝珽]
# Java自學紀錄 - 計算機實作
# 構想
寫一個視窗程式,讓使用者輸入2個數,並由使用者點選 ==+== ==-== ==*== ==/== ==%== 按鈕,在輸出其結果。接著可以點選 ==C== ==Exit== 歸零或結束執行。

# 設計步驟
1. 先規畫表單。
2. 版面配置,每一個位置先放置Panel元件。
3. 每一個Panel元件再版面配置,再放入元件。
# 先備技術
* 基本語法
* ***Panel類別***
Panel類別可以建構一個透明容器元件,在較複雜的巢狀版面設計時,可以先整體版面配置,每個位置都放一個Panel元件,然後每一個Panel可再版面配置,再放置元件。
```java=
//宣告
Panel p1 = new Panel();
```
* ***GridLayout方法***
GridLayout的功能是可以規定表單的行數列數以及其間距。
```java=
//做一列數為3,行數為1,且水平其間距為10,垂直間距為5
GridLayout lay1 = new GridLayout(3,1,10,5);
this.setLayout(lay1);
```
* Frame (Label,Button,TextField)
* ActionListener



# Code
```java=
import java.awt.*;
import java.awt.event.*;
import java.util.Scanner;
public class Java_calc extends Frame implements ActionListener{
	String str1;
	String str2;
	/*Panel 類別*/
	Panel p1 = new Panel();
	Panel p2 = new Panel();
	Panel p3 = new Panel();
	
	TextField txf1 = new TextField(str1);
	TextField txf2 = new TextField(str2);
	
	Label lblop = new Label("");
	Label lbequ = new Label("=");
	Label lbout = new Label("");
	
	Button Add = new Button("+");
	Button Sub = new Button("-");
	Button Mul = new Button("*");
	Button Div = new Button("/");
	Button Mod = new Button("%");
	Button C = new Button("C");
	Button Exit = new Button("Exit");
	
	Java_calc(){
		this.setBackground(Color.cyan);
		this.setTitle("Easy Calculator");
		this.setSize(500,500);
		/*GridLayout 方法*/
		GridLayout lay1 = new GridLayout(3,1,5,5);
		this.setLayout(lay1);
		this.add(p1);
		this.add(p2);
		this.add(p3);
		
		GridLayout lay2 = new GridLayout(1,5,5,5);
		p1.setLayout(lay2);
		p1.add(txf1);
		p1.add(lblop);
		p1.add(txf2);
		p1.add(lbequ);
		p1.add(lbout);
		
		GridLayout lay3 = new GridLayout(1,5,5,5);
		p2.setLayout(lay3);
		p2.add(Add);
		p2.add(Sub);
		p2.add(Mul);
		p2.add(Div);
		p2.add(Mod);
		
		GridLayout lay4 = new GridLayout(1,2,5,5);
		p3.setLayout(lay4);
		p3.add(C);
		p3.add(Exit);
		
		Add.addActionListener(this);
		Sub.addActionListener(this);
		Mul.addActionListener(this);
		Div.addActionListener(this);
		Mod.addActionListener(this);
		C.addActionListener(this);
		Exit.addActionListener(this);
	}
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String str1 = in.nextLine();
		String str2 = in.nextLine();
		Java_calc frm = new Java_calc();
		frm.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		frm.setVisible(true); //開啟表單
	}
	public void actionPerformed(ActionEvent e) {
		System.out.println(e.getSource());
		String s1 = txf1.getText(); //拿取字串
		int t1 = Integer.parseInt(s1); //字串轉數字
		String s2 = txf2.getText();
		int t2 = Integer.parseInt(s2);
		int ans = 0;
		if(e.getSource() == Exit) { //return 0
			System.exit(0);
		}
		else if(e.getSource() == C) { //歸零(空字串)
			str1 = "";
			str2 = "";
			
		}
		if(e.getSource() == Add) {
			ans = t1 + t2;
			lblop.setText("+");
		}
		else if(e.getSource() == Sub) {
			ans = t1 - t2;
			lblop.setText("-");
		}
		else if(e.getSource() == Mul) {
			ans = t1 * t2;
			lblop.setText("*");
		}
		else if(e.getSource() == Div) {
			ans = t1 / t2;
			lblop.setText("/");
		}
		else if(e.getSource() == Mod) {
			ans = t1 % t2;
			lblop.setText("%");
		}
		lbout.setText(Integer.toString(ans));
	}
}
```

---

>顯示結果

:::info
初始畫面,可點擊框框輸入數字
:::
![](https://i.imgur.com/VPRLfyG.png)
:::info
輸入後點擊按鍵,並輸出結果
:::
![](https://i.imgur.com/dYqfiWg.png)
:::info
按 ==C== 之後的畫面
:::
![](https://i.imgur.com/MPYUCzG.png)
:::info
任意縮放視窗一樣可保持彼此相對位置
:::
![](https://i.imgur.com/SFqruw8.png)

# 參考資料
從零開始! Java程式設計入門

> [name=洪國勝]