java實現簡單計算器

1.概述

以前做者寫過一篇文章,也是關於計算器的,用的是C++與Qt,連接在這裏java

此次用java的swing寫的(這差距好像有點大,好吧是qt太強了).git

先上圖:github

在這裏插入圖片描述

2.UI

整體佈局使用流佈局.佈局

(1)文本框

文本框就一個JPanel裏面加一個JTextField.測試

boxField.setLayout(new FlowLayout());
box.setPreferredSize(new Dimension(300, 25));
boxField.add(box);

JTextField設置尺寸須要使用setPreferredSize()而不是setSize()..net

(2)按鍵

按鍵4*4網格佈局,逐個添加button便可.code

buttonsField.setLayout(new GridLayout(4, 4, 20, 20));
buttonsField.setPreferredSize(new Dimension(300, 300));
buttonsField.add(xxx);
//add....

3.鼠標事件

鼠標事件針對button,仔細想想,單擊一個button,而後文本框裏面就會有相應的反應,據此添加事件監聽.blog

num0.addActionListener(v -> {
    box.setText(box.getText() + "0");
    mainFrame.requestFocus();
});

requestFocus()這一行把焦點還給JFrame,由於鼠標點擊button後,button會獲取焦點,會影響後面的鍵盤監聽.事件

4.鍵盤事件

鍵盤事件與鼠標事件相似,針對每一個鍵判斷便可.圖片

在這裏的是把KeyListener註冊到JFrame上面,直接在裏面重寫如下三個KeyListener的方法:

public void keyPressed(KeyEvent e);
public void keyReleased(KeyEvent e);
public void keyTyped(KeyEvent e);

基本上就是經過

if (e.getKeyCode() == KeyEvent.VK_xxxx)

來判斷各個鍵,惟一要注意一下的是+與*

由於做者使用的鍵盤沒有小鍵盤(尷尬....),+與*須要shift+=或8,嘗試過直接

if (e.getKeyCode() == KeyEvent.VK_PLUS)
if (e.getKeyCode() == KeyEvent.VK_ADD)
if (e.getKeyCode() == KeyEvent.VK_MUTIPLY)

無效.

所以須要在KeyPressed這裏判斷是否按下了shift,而後到了KeyReleased()的時候,特判一下8與=:

else if (e.getKeyCode() == KeyEvent.VK_8)
	box.setText(box.getText() + (shift ? "*" : "8"));
else if(e.getKeyCode() == KeyEvent.VK_EQUALS)
{
    if(shift)
        box.setText(box.getText() + "+");
    else
        setResult();
}

5.計算表達式

計算表達式部分這裏講了就不詳細說了,代碼在後面.

簡單來講就是先使用

GetResult.setExpression();

這個靜態方法設置表達式,而後經過

GetResult.valid()

判斷是否合法,合法的話經過

GetResult.result()

獲取String結果.

6.測試

在這裏插入圖片描述

在這裏插入圖片描述

7.源碼

github

碼雲

相關文章
相關標籤/搜索