聪明出于勤奋,天才在于积累。——华罗庚

对上次的三个问题的个人理解:

1) 程序首先是从main函数开始执行的,假设main 函数不是 static ,就要先实例化这个类,然后调用 main 方法,这似乎是不现实的. 其次 用 static 修饰的 main 方法是存储在静态的存贮区当中的,也就是说在创建一个类之后,main 函数就已经存在了,去掉 static 修饰之后,编译可以通过,但是不能执行。

2)查 API之后才发现BufferedRead 对象的 readLine()方读到的数据是,读到有换行的地方为一行,直接用 readLine 判断的时候已经读入一行了,在输出数据时就会隔行输出。

FileReader file=new FileReader("C:\\123.txt");

BufferedReader br1=newBufferedReader(file);//判断的时候已经读入一行

while((br1.readLine())!=null)

{//输出的是第二行的内容

System.out.println(br1.readLine());

}

所以用一个临时的字符串变量来存储读到的数据,程序改改这样就可以了:

FileReader file=new FileReader("C:\\123.txt");

BufferedReader br1=newBufferedReader(file);

String cd;while((cd=br1.readLine())!=null)

{

System.out.println(cd);

}

3)如果将客户端、输入流、输出流的初始化全部放进 Send 按钮的事件当中时,程序会达到我想要的效果,点击连接之后就会有客户端连接上去,但总觉得这样会有其他的安全隐患,总有一天它会暴漏的。

今天要记录在这里的是老师随堂布置的一个小程序,实现一个计算器的雏形,里面只有加减运算,对其中的按钮注册有了一点新的认识,还是将代码贴出来先。

import javax.swing.*;import java.awt.*;import java.awt.event.*;public class ComboBoxTest extendsJFrame{private JButton done =new JButton(" Done ");private JButton clear=new JButton(" Clear ");private JLabel label = new JLabel("Please choose serverID:0(+)and1(-)");publicComboBoxTest(){//添加一个组合框并设置两个选项

final JComboBox c = newJComboBox();int [] array = {0,1};

c.addItem(array[0]);

c.addItem(array[1]);final JTextField operand1=new JTextField(10); //添加第一个操作数为输入文本框,占8列

final JLabel t=new JLabel("+"); //初始化中间的操作符为“+”号

final JTextField operand2=new JTextField(10); //第二个操作符

final JTextField result=new JTextField(4); //结果的文本域 ,初始化占4列//给组合框c注册一个事件,当组合框选项发生变化的时候,触发的相应事件

c.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent e) {if(c.getSelectedIndex()==0) //选项为“0”的时候 令中间的操作符显示“+”号

t.setText(" + ");else t.setText(" - ");

}

});//给按钮Done注册一个事件,当中间的操作符不同时进行不同的操作

done.addActionListener(newActionListener(){public voidactionPerformed(ActionEvent e) {if(c.getSelectedIndex()==0)

{//当中间的操作符为“+”号时,进行两个操作数的加法 ,文本域的get()方法返回的是字符串,进行强制转换

int a=Integer.parseInt(operand1.getText())+Integer.parseInt(operand2.getText());

result.setText("="+" "+a+" "); //设置结果显示相应的结果

}else{//当中间的操作符为“-”号的时候,进行两个操作数的减法

int a=Integer.parseInt(operand1.getText())-Integer.parseInt(operand2.getText());

result.setText("="+" "+a+" ");

}

}

});//给按钮clear注册一个事件,清空两个操作数和结果的内容

clear.addActionListener(newActionListener(){public voidactionPerformed(ActionEvent e) {

operand1.setText(""); //清空操作数1

operand2.setText(""); //清空操作数2

result.setText(""); //清空结果框

}

});

setLayout(newFlowLayout());

add(label);

add(c);

add(operand1);

add(t);

add(operand2);

add(result);

add(done);

add(clear);

setSize(350,140);

setVisible(true);

}public static voidmain(String[] args) {newComboBoxTest();

}

}

上面的代码中给选项框、“done”、"clear"按钮注册事件的时候所用的都是匿名类,这个类的创建就是为了给相应的组件添加事件,还可以这样写,用里面的“clear”这个按钮来做个例子。

实现 ActionListener 抽象类当中的唯一的一个接口函数,为此定义一个 ButtonListener 监听器的对象

class ButtonListener implementsActionListener{public voidactionPerformed(ActionEvent e){

operand1.setText(""); //清空操作数1

operand2.setText(""); //清空操作数2

result.setText(""); //清空结果框

}

}

类属性当中需要定义一个 ButtonListener 的对象属性:

private ButtonListener clearaction = new ButtonListener();

最后一个步骤就是将这个按钮监听器的事件对象注册给按钮:

clear.addActionListener(clearaction);

个人总结:

这一种注册事件的方式大致过程是这样的 ButtonListener =》 ActionListener => 注册给按钮,和匿名类相比,缺点是代码量有点多,但假设你有N个打算具备这种

功能的按钮并且事件实现的方法比较复杂时,就可以实现一个 ActionListener 的对象,同时定义N个 ButtonListener 监听器对象,将相同的事件实现注册给按钮就可以了,相比之下匿名类在这种情形下面会有很大的工作量,代码量会激增。

还可以通过事件 e.getSource()方法将所有的事件处理放进一个函数当中,这样似乎维护起来要更方便一点,在类的声明当中要强调实现接口中的抽象函数。

public class ComboBoxTest extends JFrame implements ActionListener

具体的实现过程如下:

public voidactionPerformed(ActionEvent e){if(e.getSource()==c){if(c.getSelectedIndex()==0) //选项为“0”的时候 令中间的操作符显示“+”号

t.setText(" + ");else t.setText(" - ");

}if(e.getSource()==done){if(c.getSelectedIndex()==0)

{//当中间的操作符为“+”号时,进行两个操作数的加法 ,文本域的get()方法返回的是字符串,进行强制转换

int a=Integer.parseInt(operand1.getText())+Integer.parseInt(operand2.getText());

result.setText("="+" "+a+" "); //设置结果显示相应的结果

}else{//当中间的操作符为“-”号的时候,进行两个操作数的减法

int a=Integer.parseInt(operand1.getText())-Integer.parseInt(operand2.getText());

result.setText("="+" "+a+" ");

}

}if(e.getSource()==clear){

operand1.setText(""); //清空操作数1

operand2.setText(""); //清空操作数2

result.setText(""); //清空结果框

}

java swing 注册_Java 基础【04】Swing 组件事件注册相关推荐

  1. java swing桌面_Java图形界面swing面板

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Swing 四种常见面板 示例 1 : 基本面板 JPanel即为基本面板 面 ...

  2. java打印输出万年历_Java基础之打印万年历的简单实现(案例)

    Java基础之打印万年历的简单实现(案例) 问题:输入年,月,打印对应年月的日历. 示例: 问题分析: 1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星 ...

  3. Java 基础【04】Swing 组件事件注册

    聪明出于勤奋,天才在于积累.--华罗庚 对上次的三个问题的个人理解: 1) 程序首先是从main函数开始执行的,假设main 函数不是 static ,就要先实例化这个类,然后调用 main 方法,这 ...

  4. java gui 单选_java GUI编程(swing)之三swing单选框复选框组件

    swing复选框(JCheckBox) 单选框(JRadioButton) 特别说明:同一组单选按钮,必须先创建一个ButtonGroup,然后把单选按钮放到ButtonGroup 中 package ...

  5. java swing 总结_java实验之swing图形用户界面程序设计及总结

    8.1组件和容器 顶层容器有小应用程序(Applet和JApplet).对话框(Dialog和JDialog).框架(Frame和JFrame).这些容器都存在于java.swing*;中. 一般容器 ...

  6. java的swing教程_java图形化Swing教程(一)

    与多线程.泛型等不同,Swing主要在于使用. 以下主要放代码和凝视.少说话. (一)基本框架 package Swing; import java.awt.*; import javax.swing ...

  7. java swing 工具栏_Java图形界面Swing工具栏的使用

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Swing如何使用工具栏JToolBar 工具栏用于存放常用的按钮 步骤 1 ...

  8. java图形接口_java基础七 [图形用户接口](阅读Head First Java记录)

    到目前为止我们接触的都是Java的命令行,但是为了让用户使用,必须有图形化界面,所以这章主要讲的是怎么使用GUI(图形用户接口) 创建一个GUI:javax.swing.* 本章讲的布局相关内容都是j ...

  9. java选填_java基础填空选择题

    Core Java试题 选择填空题:全部为多选题,只有全部正确才能得分. 1. 编译java程序的命令是__B_;运行java程序的命令是____A____;产生java文挡的命令是_____D___ ...

最新文章

  1. 如何使用 Cockpit 管理你的树莓派
  2. ArchLinux安装图文教程(2017.06.15)
  3. Java高级-线程同步lock与unlock使用
  4. chrome浏览器中遇到bug【Error in event handler: TypeError: Cannot read property 'name' of undefined】
  5. densepose安装_基于DensePose的姿势转换系统,仅根据一张输入图像和目标姿势
  6. 判断js中数据类型 的最短代码
  7. mysql数据库函数转义函数_MySql数据库-查询、插入数据时转义函数的使用
  8. php输出语句echo、print、print_r、printf、sprintf、var_dump比较
  9. esri-leaflet入门教程(3)-自定义底图
  10. SpringMVC整合fastjson、easyui 乱码问题
  11. 深度学习自学(三十五):双向图推理全景图像分割
  12. Jmeter (三十)jmeter+ant+jenkins持续集成
  13. matlab信号系统响应实验,信号与系统实验(MATLAB版) (1)
  14. excel 趋势线的定义
  15. Vulnstack红日安全内网域渗透靶场1实战
  16. FileOpen 打开文件
  17. python求两数最小公倍数_Python自定义函数实现求两个数最大公约数、最小公倍数示例...
  18. 理解透彻!从单体式架构迁移到微服务架构
  19. Dojo: Quick Start
  20. 云计算工程师面试题集锦,常见云计算面试题及答案

热门文章

  1. 使用LDA(Linear Discriminant Analysis)进行降维(dimention reduction)详解和实战
  2. 基于GAN模型的生成人脸重构、返老还童、看见前世今生(Age Progression/Regression)
  3. 机器学习的核心要素是什么?它们分别作了什么工作?
  4. c语言如何持续输入字符直到指定字符结束_《小白学C》第三章 常用输入输出函数...
  5. ML基石_4_FeasibilityOfLearning
  6. const reference const
  7. 短序比对工具 bowtie vs BWA vs Subread vs SOAP vs NovoAlign
  8. vue点击定位到指定位置_百度地图vue-baidu-map自动定位,鼠标选点并进行逆解析,地区检索,使用案列以及解决方案...
  9. python pandas DataFrame 转置
  10. vue element ui 滚动条