1. 主要学习内容
本周的java基础课程主要学习了如何完成界面的实现,使用NetBeans作为开发工具,在画界面这块确实方便省事了不少,直接拖控件即可以实现。为了深入学习空间的事件相应,我们做了一个计算器的实现小程序。
2.事件及其处理
2.1监听接口
实现这个小程序主要用到的监听接口有ActionListener、MouseListener。
但是我们也可以学习一下其他常用到的监听接口的事件的处理方法:
监听接口 | 事件处理方法 | 功能说明 |
---|---|---|
ActionListener | actionPerformed(ActionEvent e) | 行为处理 |
AdjustmentListener | adjustmentValueChanged(AdjustmentEvent e) | 调节值改变 |
ItemListener | itemStateChanged(ItemEvent e) | 选项值状态改变 |
MouseListener | mouseClicked(MouseEvent e) | 鼠标点击 |
mouseEntered(MouseEvent e) | 鼠标进入 | |
mouseExited(MouseEvent e) | 鼠标退出 | |
mousePressed(MouseEvent e) | 鼠标按下 | |
mouseReleased(MouseEvent e) | 鼠标松开 |
2.2事件处理的要点
第一创建监听类,并在事件处理方法中编写事件处理代码;
监听类是一个扩展监听接口的类,它可以扩展一个或者多个监听接口,事件处理方法是监听接口中已经定义好的相应事件处理方法,在创建监听类时需要对这些事件的处理方法进行重写,将事件的处理的代码放入到相应的方法中。
第二创建监听对象;
监听对象是监听类的一个实例对象,具有监听功能。
第三利用组件中相应添加事件监听的方法addXXXListener()将监听对象注册到组件上;
//添加事件的监听方法到组件上
jButton4.addActionListener(new java.awt.event.ActionListener() {//创建监听对象
public void actionPerformed(java.awt.event.ActionEvent evt) {
//匿名内部类中写事件的处理方法
jButton10ActionPerformed(evt);
}
});
3.最终实现
发现可以使用ScriptEngine中的JavaScript中的eval(String e)方法直接计算表达式。那么只需要保证输入的表达式正确即可。
所以在添加小数点时需要对小数点的添加情况进行判定。
public void pointIsPressed(java.awt.event.ActionEvent evt){
//小数点被按下时,需要判断一下小数点前的情况
String temp =jTextPane1.getText().trim();
for(int i =temp.length()-1;i >=0;i --){
//一种是小数点前是操作符或为空,那么自动补零
if(i == temp.length()-1 && (isOperator(temp.charAt(i)) || jTextPane1.getText().trim().equals(""))) {
jTextPane1.setText(jTextPane1.getText().trim()+"0.");
break;
}
else {//二种先遇到操作符,那么直接加上小数点
if(isOperator(temp.charAt(i))){
jTextPane1.setText(jTextPane1.getText().trim()+".");
break;
}
//遇到小数点,那么跳出循环,提示错误
if(temp.charAt(i)== '.'){
JOptionPane.showMessageDialog(null, "您此次输入有误,请重新输入!");
break;
}
if(i == 0 && temp.charAt(i)!='.') jTextPane1.setText(jTextPane1.getText().trim()+".");
}
}
}
核心代码:
public void equalPressed(java.awt.event.ActionEvent evt){
try{
String str = jTextPane1.getText();
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine se = manager.getEngineByName("js");
Double result = (Double)se.eval(str);
jTextPane1.setText(result.toString());
}catch(ScriptException ex){
Logger.getLogger((Calculator.class.getName()), log(Level.SEVERE,null,ex));
jTextPane1.setText("表达式错误!");
}
}
4.
刚刚接触java不久,需要学习的地方还有很多,加油捏~