重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
之前作者写过一篇文章,也是关于计算器的,用的是C++与Qt,链接在这里
成都创新互联专注于企业网络营销推广、网站重做改版、恭城网站定制设计、自适应品牌网站建设、H5技术、电子商务商城网站建设、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为恭城等各大城市提供网站开发制作服务。这次用java的swing写的(这差距好像有点大,好吧是qt太强了).
先上图:
总体布局使用流布局.
文本框就一个JPanel里面加一个JTextField.
boxField.setLayout(new FlowLayout());
box.setPreferredSize(new Dimension(300, 25));
boxField.add(box);
JTextField设置尺寸需要使用setPreferredSize()而不是setSize().
按键4*4网格布局,逐个添加button即可.
buttonsField.setLayout(new GridLayout(4, 4, 20, 20));
buttonsField.setPreferredSize(new Dimension(300, 300));
buttonsField.add(xxx);
//add....
鼠标事件针对button,仔细想一想,单击一个button,然后文本框里面就会有相应的反应,据此添加事件监听.
num0.addActionListener(v -> {
box.setText(box.getText() + "0");
mainFrame.requestFocus();
});
requestFocus()这一行把焦点还给JFrame,因为鼠标点击button后,button会获取焦点,会影响后面的键盘监听.
键盘事件与鼠标事件类似,针对每个键判断即可.
在这里的是把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();
}
计算表达式部分这里讲了就不详细说了,代码在后面.
简单来说就是先使用
GetResult.setExpression();
这个静态方法设置表达式,然后通过
GetResult.valid()
判断是否合法,合法的话通过
GetResult.result()
获取String结果.
github
码云
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。