Java自从jdk1.1之后,都是用委托事件模型处理用户所触发的事件,并忽略我们不需要处理的事件。这种处理方法可以增加系统的效能;保证事件处理结构的清晰。
Java的事件处理模型要求注意三点:
1)source是什么。也就是什么组件要被处理。例如按钮、单选框、复选框、滑动条等。
2)什么样的事件要处理。例如按下按钮或键盘。
3)编写处理事件的代码。
在此。我以JTabbedPane为例子,介绍事件委托模型。
public class JTabbedPane2 implements ActionListener, ChangeListener {
int index = 0;
int newNumber = 1;
JTabbedPane tabbedPane = null;
public JTabbedPane2() {
JFrame f = new JFrame("JTabbedPaneDemo");
Container contentPane = f.getContentPane();
JLabel label1 = new JLabel(new ImageIcon(".\\ch05\\icons\\flower.jpg"));
JPanel panel1 = new JPanel();
panel1.add(label1);
JLabel label2 = new JLabel("Label 2",JLabel.CENTER);
label2.setBackground(Color.pink);
label2.setOpaque(true);
JPanel panel2 = new JPanel();
panel2.add(label2);
JLabel label3 = new JLabel("Label 3",JLabel.CENTER);
label3.setBackground(Color.yellow);
label3.setOpaque(true);
JPanel panel3 = new JPanel();
panel3.add(label3);
tabbedPane = new JTabbedPane();
tabbedPane.setTabPlacement(JTabbedPane.LEFT);
tabbedPane.addChangeListener(this);
tabbedPane.addTab("Picture",new ImageIcon(".\\icons\\eye.jpg"),panel1,"ͼ��");
tabbedPane.addTab("Label 2",panel2);
tabbedPane.addTab("Label 3",null,panel3,"label");
tabbedPane.setEnabledAt(2,true); //��Label 3��ǩΪDisable״̬
JButton b = new JButton("Create a label");
b.addActionListener(this);
contentPane.add(b,BorderLayout.NORTH);
contentPane.add(tabbedPane,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void stateChanged(ChangeEvent e) {
if (index != tabbedPane.getSelectedIndex()) {
if(index < tabbedPane.getTabCount() - 1) {
tabbedPane.setEnabledAt(index+1,true);
}
}
index = tabbedPane.getSelectedIndex();
}
@Override
public void actionPerformed(ActionEvent e1) {
JPanel panel = new JPanel();
tabbedPane.addTab("new "+ newNumber, panel);
tabbedPane.setEnabledAt(newNumber + 2,false);
newNumber++;
tabbedPane.validate();
}
public static void main(String[] arg) {
new JTabbedPane2();
}
}
在此。我们可以看到stateChanged和actionPerformed两个方法(事件),由JTabbledPane和JButton分别注册。他们执行了不同的代码内容。