这次用java的swing写的(这差距好像有点大,好吧是qt太强了).
先上图:
总体布局使用流布局.
(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.测试郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。