使用Java Swing组件进行事件处理方法的分析与比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用Java Swing组件进行事件处理方法的分析与比较
摘要:Swing组件是Java基本类库的一部分,是用于开发Java应用程序用户界面的开发工具包。通过具体实例分析了多种使用Swing 组件进行事件处理的方法,并对这些方法进行了比较。
关键词:Java;Swing;监听;内部类;事件
0引言
Swing组件是Java语言中用来编写图形化界面的工具包,它使用灵活、功能强大,使得开发人员利用其提供的各种类与方法能够快速地创建出符合用户需求的各种美观、实用的图形界面。Swing组件具有自动对各种用户的动作产生响应的功能,例如当某一用户点击button按钮或选择菜单栏时,该动作将会被监听处理。在代码编写的过程中注册监听器是必须完成的工作,通过它对事件源进行监听,这样在程序中就可以十分方便地对用户行为进行响应处理。
1使用Swing组件进行事件处理过程
使用Java Swing组件进行事件处理的过程分为如下几个步骤:首先,创建一个新的Swing组件(例如按钮或者菜单栏等);其次,将刚刚创建的组件添加到定义的面板中去;然后,通过注册监听器对事件源进行监听(例如对用户点击按钮或者点击鼠标的动作);最后,在程序中编写响应事件源产生事件的各种方法。
上述几个步骤的实现可以通过多种方法来完成。第一种可使用的方法是通过注册单个监听器并使用多个if条件判断语句来决定响应
的事件源;第二种方法使用Java语言中的匿名内部类来进行相关的事件处理过程;第三种方法是通过一般内部类来进行事件的响应。第二种、第三种方法从本质上来说,都是在进行事件处理的过程中使用了多个Java的内部类,而不同之处在于具体实现有较大变化。下面通过一个简单的Java 应用程序(创建两个按钮,当用户点击按钮后产生不同的显示结果)展示怎样通过以上3种方法来实现Swing组件的事件处理过程。
1.1单个监听器方式
该方法使用单个监听器来进行实现。具体完成该方法的过程为:建立一个名为Example的类,当用户点击button按钮后,监听器ExampleListenner会对该动作进行监听并交由actionPerformed()方法来进行相应的事件处理。在该过程中,使用了一个动作监听器来对事件源进行监听,用多个if的条件语句来决定是哪个事件源。
Example类构造器的主要代码:
①JPanel panel1 = new JPanel();
②JButton button1 = new JButton("button1 ");
③JButton button2 = new JButton("button2 ");
④ExampleListener listener1 = new ExampleListener();
⑤button1.addActionListener(listener1);
⑥button2.addActionListener(listener1);
⑦panel1.add(button1);
⑧panel.add(button2);// 添加按钮到面板
第①句新建了一个panel1的面板对象;第②、③句创建了两个按钮:button1和button2;第④句创建了一个监听器;第⑤、⑥句让button1和button2两个按钮共享第④句中新建的监听器;第⑦、⑧句将两个button添加到第①句中的panel1面板中。
内部监听类ExampleListener用来监听事件并响应,监听器中的actionPerformed(ActionEvent e)方法的主要代码为:
①if (e.getSource()==button1)
②String bName = e.getActionCommand();
③if (bName.equals("button1 "))
④JOptionPane.showMessageDialog(frame1,"用户点击了button1 ");
⑤else if (bName.equals("button2 "))
⑥JOptionPane.showMessageDialog(frame1,"用户点击了button2 ");
⑦else
⑧JOptionPane.showMessageDialog(frame1,"未知事件源" );
第①、②句通过getSource方法来判断用户点击了哪个按钮并使用getActionCommand方法获得按钮名称;第③到第⑧句利用if语句来确定事件源的产生即哪个按钮被用户点击了,在相应控件中输出相关提示。
main方法中的主要代码:
①Example ex = new Example();
②JFrame frame1 = new JFrame("ex ");
③frame1.addWindowListener(new WindowAdapter(){
④public void windowClosing(WindowEvent e)
⑤{System.exit(0);} });
⑥frame1.getContentPane().add(panel1);⑦frame1.pack();
⑧frame1.setVisible(true);
第①、②句创建了一个JFrame的对象frame1;第③~⑤语句在frame1对象中加入窗口监听器用来处理关闭事件的方法;第⑥~⑧句将面板panel1添加到frame1中,panel1中包含两个button按钮。当程序运行时,通过注册过的监听器对两个button按钮进行监听,当用户点击其中的一个按钮后(使用if语句进行判断),相应的提示信息将显示在面板上。
1.2匿名内部类方式
使用简单的匿名内部类作为addActionListener的变量即可。在这种方法中,使用匿名内部类对组件事件进行监听,这样就可以避免运用if语句来判断哪个按钮被点击即哪个事件源产生的事件。
在Example类中需要改变的主要代码如下:
①button1.addActionListener(
②new ActionListener()
③{ public void actionPerformed(ActionEvent e){
④JOptionPane.showMessageDialog(frame1,"用户点击了button1 ");} } );