java 事件处理的几种写法
2016-07-13 22:34
483 查看
三种都是在构造方法中添加监听器的,不同的是第一种实例监听器,然后再组件中添加,具体事件处理方法是放在类外的
第二种是不实例,直接用newEnlargeListener(),并且EnlargeListener也设为内部类
第三种匿名类监听器
(1)public class HandleEventextends JFrame{ //HandleEvent
继承JFrame
public HandleEvent(){
add(panel); //JFrame中包含panel
,panel中包含jbtOK
OKListenerClasslistener1 = new OKListenerClass(); //实例化监听器listener1
CanelListenerClasslistener2 = new CanelListenerClass();
jbtOK.addActionListener(listener1); //在jbtOK中添加监听器listener1
jbtCancel.addActionListener(listener2);
}
class OKListenerClass implementsActionListener{ //OKListenerClass
实例ActionListener
public voidactionPerformed(ActionEvent e){
System.out.println("OK buttonclicked");
}
}
class CanelListenerClassimplements ActionListener{
public voidactionPerformed(ActionEvent e){
System.out.println("Canel buttonclicked");
}
}
(2) public class ControlCircle2 extends JFrame{
public ControlCircle2(){
jbtEnlarge.addActionListener(new EnlargeListener());
jbtShink.addActionListener(newShinkListener());
}
classEnlargeListener implements ActionListener{
public voidactionPerformed(ActionEvent e){
canvas.enlarge();
}
}
(3) jbtNew.addActionListener(
new ActionListener(){
publicvoidactionPerformed(ActionEvent
e){
System.out.println("ProcessNew");
}
});
具体代码如下
package demo01;
import java.awt.event.*;
import javax.swing.*;
public class HandleEvent extends JFrame{ //HandleEvent 继承JFrame
public HandleEvent(){
JButton jbtOK = new JButton("OK");
JButton jbtCancel = new JButton("Cancel");
JPanel panel = new JPanel();
panel.add(jbtOK);
panel.add(jbtCancel);
add(panel); //JFrame中包含panel ,panel中包含jbtOK
OKListenerClass listener1 = new OKListenerClass(); //实例化监听器listener1
CanelListenerClass listener2 = new CanelListenerClass();
jbtOK.addActionListener(listener1); //在jbtOK中添加监听器listener1
jbtCancel.addActionListener(listener2);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame = new HandleEvent();
frame.setTitle("Handle Event");
frame.setSize(200, 150);
frame.setLocation(200,100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class OKListenerClass implements ActionListener{ //OKListenerClass 实例ActionListener
public void actionPerformed(ActionEvent e){
System.out.println("OK button clicked");
}
}
class CanelListenerClass implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println("Canel button clicked");
}
}
package demo01; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ControlCircle2 extends JFrame{ private JButton jbtEnlarge = new JButton("Enlarge"); private JButton jbtShink = new JButton("Shrink"); private CirclePanel canvas = new CirclePanel(); public ControlCircle2(){ JPanel panel = new JPanel(); panel.add(jbtEnlarge); panel.add(jbtShink); this.add(panel,BorderLayout.SOUTH); this.add(canvas,BorderLayout.CENTER); jbtEnlarge.addActionListener(new EnlargeListener()); jbtShink.addActionListener(new ShinkListener()); } public static void main(String []args){ JFrame frame = new ControlCircle2(); frame.setTitle("ControlCir 4000 cle2"); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(200, 200); frame.setVisible(true); } class EnlargeListener implements ActionListener{ public void actionPerformed(ActionEvent e){ canvas.enlarge(); } } class ShinkListener implements ActionListener{ public void actionPerformed(ActionEvent e){ canvas.enlarge2(); } } class CirclePanel extends JPanel{ private int radius = 5; public void enlarge(){ radius++; repaint(); } public void enlarge2(){ radius--; repaint(); } protected void paintComponent(Graphics g){ super.paintComponent(g); g.drawOval(getWidth()/2-radius, getHeight()/2-radius, 2*radius,2*radius); } } }
package demo01; import javax.swing.*; import java.awt.event.*; public class AnnoymousListenerDemo extends JFrame{ public AnnoymousListenerDemo(){ JButton jbtNew = new JButton("New"); JButton jbtOpen = new JButton("Open"); JButton jbtSave = new JButton("Save"); JButton jbtPrint = new JButton("Print"); JPanel panel = new JPanel(); panel.add(jbtNew); panel.add(jbtOpen); panel.add(jbtSave); panel.add(jbtPrint); add(panel); //Create and register anonymous inner-class listener jbtNew.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("Process New"); } }); jbtOpen.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("Process Open"); } }); jbtSave.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("Process Save"); } }); jbtPrint.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println("Process Print"); } }); } public static void main(String[] args) { // TODO Auto-generated method stub JFrame frame = new AnnoymousListenerDemo(); frame.setTitle("AnnoymousListenerDemo"); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); //这里没有用setSize方法,pack()方法会随放在框架中组件的大小来自动调整框架大小 frame.setVisible(true); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树