一个监听器对象用来监听两个对象,如何判定事件源?
LeftRight .java(驱动程序)
LeftRightPanel .java
效果如图:
源程序如下:
import javax.swing.JFrame;
public class LeftRight {
public static void main(String[] args) {
JFrame frame = new JFrame("Right or Left");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new LeftRightPanel());
frame.pack();
frame.setVisible(true);
}
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class LeftRightPanel extends Panel {
private JButton left,right;
private Label label;
//另外定义盛放按钮的Panel
private JPanel buttonPanel;
public LeftRightPanel(){
left = new JButton("Left");
right = new JButton("Right");
ButtonListener listener = new ButtonListener();
left.addActionListener(listener);
right.addActionListener(listener);
label = new Label("Push a button");
buttonPanel = new JPanel();
buttonPanel.setPreferredSize(new Dimension(200,40));
buttonPanel.setBackground(Color.cyan);
buttonPanel.add(left);
buttonPanel.add(right);
setPreferredSize(new Dimension(200,80));
setBackground(Color.cyan);
add(label);
add(buttonPanel);
}
//判定事件源
public class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource() == left)
label.setText("Left");
else
label.setText("Right");
}
}
}
两个按钮被放到同一个buttonPanel面板中,这本面板不是由LeftRightPanel类表示的面板。将两个按钮放到同一个面板中,可以保证它们显示时的相对位置关系,即使用各种方法重置框架也不受影响。