今天學了GUI,自己寫了一個電腦。基本功能都實作了。不過還有很多缺陷,我用的方法也不好,全部代碼都寫在了同一個方法中了。還寫的很啰嗦。發個部落格紀念一下今天下午的成果。和大家分享一下成果,代碼後面還會繼續改進。
代碼如下:
package com.jisuanqi;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JSQ extends JFrame {
public static void main(String[] args) {
new JSQ();
}
public JSQ() {
setTitle("電腦"); // 标題名稱
setSize(240, 350); // 視窗大小
setLocationRelativeTo(null);// 視窗居中
setLayout(new BorderLayout()); // 布局方式
final JTextField lblxian = new JTextField(); // 文本輸入框
lblxian.setFont(new Font("宋體", Font.PLAIN, 50)); // 設定字型
lblxian.setPreferredSize(new Dimension(230, 70)); // 設定顯示器的大小
JPanel panelxian = new JPanel(); // 容器
panelxian.add(lblxian);
add(panelxian, BorderLayout.NORTH); // 加到視窗上
JPanel panelS = new JPanel();
add(panelS, BorderLayout.SOUTH);
panelS.setLayout(new GridLayout(5, 4)); // 設定布局方式
JButton btnAC = new JButton("AC"); // 清空數字的按鈕
// 監聽器
btnAC.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(""); // 設定數字為空,清空數字
}
});
panelS.add(btnAC);
add(panelS);
JButton btnZhengFu = new JButton("+/-");
panelS.add(btnZhengFu);
add(panelS);
JButton btnBai = new JButton("%"); // 百分号按鈕
// 監聽器
btnBai.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
double num = Double.parseDouble(lblxian.getText());
lblxian.setText("" + (num / 100));
}
});
panelS.add(btnBai);
add(panelS);
JButton btnChu = new JButton("/"); // 除号按鈕
// 監聽器
btnChu.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (lblxian.getText().indexOf("/") > 0) { // 判斷是否有除号,有的話不能再輸入除号
} else {
lblxian.setText(lblxian.getText() + "/");
}
}
});
btnChu.setBackground(Color.orange);
panelS.add(btnChu);
add(panelS);
JButton btn7 = new JButton("7"); // 數字7按鈕
btn7.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 7);
}
});
panelS.add(btn7);
add(panelS);
JButton btn8 = new JButton("8");// 數組8的按鈕
btn8.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 8);
}
});
panelS.add(btn8);
add(panelS);
JButton btn9 = new JButton("9");// 數字9的按鈕
btn9.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 9);
}
});
panelS.add(btn9);
add(panelS);
JButton btnCheng = new JButton("X");// 乘号的按鈕
btnCheng.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { // 判斷是否有乘号,有的話,不能再輸入乘号
if (lblxian.getText().indexOf("*") > 0) {
} else {
lblxian.setText(lblxian.getText() + "*");
}
}
});
btnCheng.setBackground(Color.orange);
panelS.add(btnCheng);
add(panelS);
JButton btn4 = new JButton("4"); // 數字4的按鈕
btn4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 4);
}
});
panelS.add(btn4);
add(panelS);
JButton btn5 = new JButton("5");// 數字5的按鈕
btn5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 5);
}
});
panelS.add(btn5);
add(panelS);
JButton btn6 = new JButton("6");// 數字6的按鈕
btn6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 6);
}
});
panelS.add(btn6);
add(panelS);
JButton btnJian = new JButton("-");// 減号的按鈕
btnJian.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (lblxian.getText().indexOf("-") > 0) { // 判斷是否有減号,有的話不用再輸入減号
} else {
lblxian.setText(lblxian.getText() + "-");
}
}
});
btnJian.setBackground(Color.orange);
panelS.add(btnJian);
add(panelS);
JButton btn1 = new JButton("1");// 數字1的按鈕
btn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 1);
}
});
panelS.add(btn1);
add(panelS);
JButton btn2 = new JButton("2");// 數字2的按鈕
btn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 2);
}
});
panelS.add(btn2);
add(panelS);
JButton btn3 = new JButton("3");// 數字3的按鈕
btn3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 3);
}
});
panelS.add(btn3);
add(panelS);
JButton btnJia = new JButton("+");// 加号的按鈕
btnJia.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (lblxian.getText().indexOf("+") > 0) { // 判斷是否有加号,有的話不能再輸入加号
} else {
lblxian.setText(lblxian.getText() + "+");
}
}
});
btnJia.setBackground(Color.orange);
panelS.add(btnJia);
add(panelS);
JButton btn0 = new JButton("0");// 數字0的按鈕
btn0.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + 0);
}
});
panelS.add(btn0);
add(panelS);
JButton btnTui = new JButton("←");// 倒退的按鈕
btnTui.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String c = lblxian.getText();
String num = c.substring(0, c.length() - 1); // 截圖輸入框中字元從0到倒數第二個的字元
lblxian.setText(num);
}
});
panelS.add(btnTui);
add(panelS);
JButton btnDian = new JButton(".");// 小數點的按鈕
btnDian.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lblxian.setText(lblxian.getText() + ".");
}
});
panelS.add(btnDian);
add(panelS);
JButton btnDeng = new JButton("=");// 等号的按鈕
btnDeng.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String content = lblxian.getText(); // 擷取文本框的數
int i = content.indexOf("+"); // 搜尋加号的位置
if (i > 0) {
// 加法
String num1 = content.substring(0, i); // 截取加号前的數字
String num2 = content.substring(i + 1, content.length());// 截取加号以後的數字
try {
double fNum = Double.parseDouble(num1);// 強行轉化為double的資料類型
double sNum = Double.parseDouble(num2);// 強行轉化為double的資料類型
double sum = fNum + sNum; // 兩數相加
lblxian.setText("" + sum);// 輸出到文本框
} catch (Exception e2) {
}
}
String content1 = lblxian.getText();// 擷取文本框數字
int j = content1.indexOf("-"); // 搜尋減号的位置
if (j > 0) {
// 減法
String num1 = content1.substring(0, j); // 截取減号前的數字
String num2 = content1.substring(j + 1, content1.length()); // 截取減号後的數字
try {
double fNum = Double.parseDouble(num1);// 強行轉化為double的資料類型
double sNum = Double.parseDouble(num2);// 強行轉化為double的資料類型
double jian = fNum - sNum; // 兩數相減
lblxian.setText("" + jian); // 設定文本框
} catch (Exception e2) {
}
}
String content2 = lblxian.getText();// 擷取文本框數字
int k = content2.indexOf("*"); // 搜尋乘号的位置
if (k > 0) {
// 乘法
String num1 = content2.substring(0, k); // 截取乘号前的數字
String num2 = content2.substring(k + 1, content2.length());// 截取乘号後面的數字
try {
double fNum = Double.parseDouble(num1);// 強行轉化為double的資料類型
double sNum = Double.parseDouble(num2);// 強行轉化為double的資料類型
double cheng = fNum * sNum;// 兩數相乘
lblxian.setText("" + cheng); // 設定文本框
} catch (Exception e2) {
}
}
String content3 = lblxian.getText();// 擷取文本框的内容
int l = content3.indexOf("/"); // 搜尋除号的位置
if (l > 0) {
// 除法
String num1 = content3.substring(0, l);// 截取除号前的數字
String num2 = content3.substring(l + 1, content3.length());// 截取除号後的數字
try {
double fNum = Double.parseDouble(num1);// 強行轉化為double的資料類型
double sNum = Double.parseDouble(num2);// 強行轉化為double的資料類型
double chu = fNum / sNum;// 兩數相除
lblxian.setText("" + chu);// 設定文本框内容
} catch (Exception e2) {
}
}
}
});
btnDeng.setBackground(Color.orange);
panelS.add(btnDeng);
add(panelS);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 關閉視窗
setVisible(true);// 顯示視窗
}
}