检查主java类中的面板事件

时间:2012-12-11 06:19:30

标签: java swing jframe jpanel

我想检查JFrame类中添加的面板类的事件。在此示例程序中,面板上有一个按钮。

我想监视源框架中按钮的click事件。

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

class test extends JFrame implements ActionListener {
    test() {
        Container cp = this.getContentPane();
        JButton b1 = new JButton("add");
        cp.add(b1);
        b1.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("add")) {
            panel1 frm = new panel1();
            cp.add(frm);
        }
    }

    public static void main(String args[]) {
        test t1 = new test();
        t1.show(true);
    } 
}


class panel1 extends JPanel {
    panel1() {
        JButton b1 = new JButton("ok");
        add(b1);
    }
}

2 个答案:

答案 0 :(得分:1)

你需要向{out}世界提供JButton一些方法。

我个人不愿意让按钮本身可用,相反,我会允许外界将ActionListener附加到它上面......

public class Test extends JFrame implements ActionListener {
    public Test() {
        Container cp = this.getContentPane();
        JButton b1 = new JButton("add");
        cp.add(b1);
        b1.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("add")) {
            TestPane frm = new TestPane();
            frm.addActionListener(...); // Add your new action listener here
            cp.add(frm);
        }
    }

    public static void main(String args[]) {
        test t1 = new test();
        t1.show(true);
    } 
}


public class TestPane extends JPanel {
    private JButton b1;
    public TestPane() {
        b1 = new JButton("ok");
        add(b1);
    }

    public void addActionListener(ActionListener listener) {
        b1.addActionListener(listener);
    }

    public void removeActionListener(ActionListener listener) {
        b1.removeActionListener(listener);
    }
}

答案 1 :(得分:0)

无论你放入框架中它只是放入框架的中心。因此,使用BorderLayout可以看到如下所示

 public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("add")) {
            System.out.println("in actionPerformed");
            panel1 frm = new panel1();
          // this.removeAll();
            add(frm,BorderLayout.NORTH);
            this.validate();
        }
    }