定义监听器的三种方法

用监听器去处理按钮上的动作。下面都采用了匿名内部类来实现代码。
给出同一个例子的三段代码
1.常规的一个按钮设置一个监听器,注册一个按钮
2.只定义一个内部监听器(定义了一个新的类),注册给四个按钮,用getSource()检测动作的来源
3.在框架内实现监听器,注册给四个按钮。

个人推荐第二种。第一种看起来太冗余,第三种没有监听器的类,代码不利于阅读和维护。

第一个

package eventDriven;
import javax.swing.*;
import java.awt.event.*;

public class AnonymousListenerDemo extends JFrame{
	
	public AnonymousListenerDemo() {
		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);
		
		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) {
			JFrame frame=new AnonymousListenerDemo();
			frame.setTitle("AnonyMouseListenerDemo");
			frame.setLocationRelativeTo(null);
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.pack();                 //依据组件大小自动调整框架
			frame.setVisible(true);
			
		}
}

第二个

package eventDriven;
import javax.swing.*;
import java.awt.event.*;

public class DatectSourceDemo extends JFrame {
	private JButton jbtNew =new JButton("New");
	private JButton jbtOpen =new JButton("Open");
	private JButton jbtSave =new JButton("Save");
	private JButton jbtPrint =new JButton("Print");
	
	
	public  DatectSourceDemo() {
		JPanel panel=new JPanel();
		panel.add(jbtNew);
		panel.add(jbtOpen);
		panel.add(jbtSave);
		panel.add(jbtPrint);
		
		add(panel);
		
		ButtonListener listener=new ButtonListener();
		jbtNew.addActionListener(listener);
		jbtOpen.addActionListener(listener);
		jbtSave.addActionListener(listener);
		jbtPrint.addActionListener(listener);
	}
	
	class ButtonListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if(e.getSource()==jbtNew)
				System.out.println("Process New");
			else if(e.getSource()==jbtOpen){
				System.out.println("Process Open");
			}
			else if(e.getSource()==jbtSave) {
				System.out.println("Process Save");
			}
			else {
				System.out.println("Process Print");
			}
	}
	}
	
	public static void main(String[] args) {
		JFrame frame=new AnonymousListenerDemo();
		frame.setTitle("AnonyMouseListenerDemo");
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();                 //依据组件大小自动调整框架
		frame.setVisible(true);
		
	}
}
	

第三种

package eventDriven;
import javax.swing.*;
import java.awt.event.*;

public class FrameAsListenerDemo extends JFrame implements ActionListener{        //在框架里把ActionListener实现了
	private JButton jbtNew =new JButton("New");
	private JButton jbtOpen =new JButton("Open");
	private JButton jbtSave =new JButton("Save");
	private JButton jbtPrint =new JButton("Print");
	
	public FrameAsListenerDemo() {
		JPanel panel=new JPanel();
		panel.add(jbtNew);
		panel.add(jbtOpen);
		panel.add(jbtSave);
		panel.add(jbtPrint);
		
		add(panel);
		
		jbtNew.addActionListener(this);
		jbtOpen.addActionListener(this);
		jbtSave.addActionListener(this);
		jbtPrint.addActionListener(this);
	}
	
		public void actionPerformed(ActionEvent e) {
			if(e.getSource()==jbtNew)
				System.out.println("Process New");
			else if(e.getSource()==jbtOpen){
				System.out.println("Process Open");
			}
			else if(e.getSource()==jbtSave) {
				System.out.println("Process Save");
			}
			else {
				System.out.println("Process Print");
			}
	}

	public static void main(String[] args) {
		JFrame frame=new AnonymousListenerDemo();
		frame.setTitle("AnonyMouseListenerDemo");
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();                 //依据组件大小自动调整框架
		frame.setVisible(true);
		
	}
}

猜你喜欢

转载自blog.csdn.net/alike_meng/article/details/84373534