0

クラスに追加されているパネルクラスのイベントを確認したいJFrame。このサンプルプログラムでは、パネルにボタンがあります。

ソースフレームからボタンのクリックイベントを監視したい。

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);
    }
}
4

2 に答える 2

1

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);
    }
}
于 2012-12-11T06:37:28.520 に答える
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();
        }
    }
于 2012-12-11T06:55:24.553 に答える