使用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)
⑤{it(0);} });
⑥ContentPane().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 ");} } );
⑤panel1.add(button1);// 添加按钮到面板
第①~④句对按钮button1添加了一个动作,一旦button1被点击,窗体会显示“用户点击了button1”的提示信息;第⑤句将已被监听button1放置于面板中。针对button2可以使用与button1相同的监听方式完成对点击button2的动作进行事件处理。
1.3一般内部类方式
这种方法将所有关于事件处理的程序代码聚集起来,增加代码的可阅读性和可维护性,避免使用第二种方法带来的代码混乱的重大缺陷。由于使用了一般内部类,使得定义的内部类可以被Swing组件多次使用。javaswing酷炫界面
一般内部类来进行事件处理的主要代码如下:
①private class Handler1 implements ActionListener
②{ public void actionPerformed(ActionEvent e){
③JOptionPane.showMessageDialog(frame1,"用户点击了button1");} }
第①~③句语句创建了一个名为Handler1的类,它执行了ActionListener的接口,一旦button1被点击就会产生相应的事件处理。针对button2,同样创建一个类似的类,使其在被点击后在面板中能够显示提示信息。
类构造器中每个按钮都进行了注册监听,监听通过内部类的方式实现,代码如下:
button1.addActionListener(new Handler1());
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论