用监听器去处理按钮上的动作。下面都采用了匿名内部类来实现代码。
给出同一个例子的三段代码
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);
}
}