Java事件处理

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分别注册。他们执行了不同的代码内容。

你可能感兴趣的:(Java事件处理)