java實現簡單計算器

1.概述

之前作者寫過一篇文章,也是關於計算器的,用的是C++與Qt,鏈接在這裏

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

先上圖:

在這裏插入圖片描述

2.UI

總體佈局使用流佈局.

(1)文本框

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

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

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

(2)按鍵

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

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

3.鼠標事件

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

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

碼雲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章