0

Program クラスと EventHandler クラスの 2 つのクラスに問題があります。

Program クラスは 2 つの別個のウィンドウを作成します。1 つは「Ground」(背景 jpg のウィンドウ) で、もう 1 つのウィンドウには「追加」ボタンがあり、「Ground」に花を追加します。「追加」ボタンは、クラス Eventhandler のオブジェクトを作成するメソッド ActionListener を呼び出します。

   public  class Program implements Runnable {

    @Override
    //implements interface
    public void run() {
        example1.Ground g;
        g = new example1.Ground();
    // ground object
        javax.swing.JFrame window = new javax.swing.JFrame("windowwithbutton");
        //window (JFRAME)
        javax.swing.JPanel panel = new javax.swing.JPanel();
        //content (JPANEL)
        javax.swing.JButton ab = new javax.swing.JButton("add");
        ab.addActionListener(new eventHandler());

イベントハンドラ クラス:

public class Eventhandler implements java.awt.event.ActionListener {


@Override

   public void actionPerformed(java.awt.event.ActionEvent e) {

    example1.Flower flower;
    flower = new example1.Flower();

すべて正常に動作しますが、イベント ハンドラにコードを追加するのが難しいため、ボタンを押すと、プログラム クラスによって作成された地面に花が作成されます。このオブジェクト間の関連付けをどのように設定すればよいですか?

ありがとう :)

4

1 に答える 1

1

何らかの種類のオブジェクトの何らかの参照を に渡す必要があります。EventHandlerやりたくないのは、必要以上のパワーを に与えることEventHandlerです。たとえば、花を追加するイベントハンドラは、たとえば、世界に火をつける (またはコンポーネントからすべてを削除する) ことはできません。

イベント ハンドラーは、イベントがどのように発生するかについて何も知る必要はなく、何らかのメソッドを呼び出すときに知っているだけです。

たとえば、いくつかのインターフェイスを作成することから始めます...

public interface Flower {
    // What ever properties you want you flower to have
}

public interface Ground {

    public void add(Flower flower);
    // Other stuff you might like ground to have/do

}

これらは、これらのインターフェースの他のユーザーへのコントラクトを記述し、それらから何が実行または取得できるかを記述します。これはオブジェクト指向プログラミングにおいて非常に重要な概念です。

次に、これらのクラスに何らかの実装を提供する必要があります

public class AFlower extends ... implements Flower {

}

public class SomeGround extends ... implements Ground {

}

これらはこれらのインターフェイスの物理Flower的な実装です。RoseVenusFlyTrapGround

さて、あなたEventHandlerが実際に有用なことをできるようにするには、それを のインスタンスに渡して操作する必要がありますGround。たとえば...

public class Eventhandler implements java.awt.event.ActionListener {

    private Ground ground;

    public Eventhandler(Ground ground) {
        this.ground = ground;
    }

    @Override
    public void actionPerformed(java.awt.event.ActionEvent e) {
        Flower flower = new AFlower();
        ground.add(flow);
    }

次に、 のインスタンスを作成するときに、 のインスタンスをEventHandler渡しますGround。たとえば...

example1.Ground g = new SomeGround();
// ground object
javax.swing.JFrame window = new javax.swing.JFrame("windowwithbutton");
//window (JFRAME)
javax.swing.JPanel panel = new javax.swing.JPanel();
//content (JPANEL)
javax.swing.JButton ab = new javax.swing.JButton("add");
ab.addActionListener(new EventHandler(g));
于 2014-10-30T06:52:09.350 に答える