Javaの:そのクラスからオブジェクトの上に別のクラス内の関数を呼び出すためにActionListenerを使用します

StackOverflow https://stackoverflow.com/questions/1346978

質問

基本的に私は何をしたいの方法別のクラスで実行され、別のオブジェクトに作用を開始するために、スタートボタンを取得されます。

リスナーのための私のコード:

button1a.addActionListener(new ActionListener() {
    public void actionPerformed (ActionEvent event) {
        // Figure out how to make this work
        //sim.runCastleCrash(); 
    }
} );

他のクラスのための私のコード:

public static void main(String[] args) {
    CastleCrash sim;
    sim = new CastleCrash();
}

public void runCastleCrash() {
    System.out.println("Castle Crash is beginning...");
    //Other method parts here to be added
}

私は、これはあまりにも難しいことはできませんが、私は作品を欠けている感覚を得る。

役に立ちましたか?

解決

匿名クラスで物事を参照するための一つの方法は、finalキーワードを使用しています:

  public static void main(String[] args) {
    final Object thingIWantToUse = "Hello";

    JButton button = new JButton("Click");
    button.addActionListener(new ActionListener() {
      @Override public void actionPerformed(ActionEvent e) {
        System.out.println(thingIWantToUse);
      }
    });

    JFrame frame = new JFrame();
    frame.setLayout(new FlowLayout());
    frame.add(button);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

また、あなたは外側の型のメンバ(変数またはメソッド)にアクセスすることができます:

public class ActionListenerDemo2 {
  private final JFrame frame = new JFrame();
  private Object thingIWantToUse = "Hello";

  public ActionListenerDemo2() {
    JButton button = new JButton("Click");
    button.addActionListener(new ActionListener() {
      @Override public void actionPerformed(ActionEvent e) {
        thingIWantToUse = "Goodbye";
        System.out.println(thingIWantToUse);
      }
    });
    frame.setLayout(new FlowLayout());
    frame.add(button);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    new ActionListenerDemo2().frame.setVisible(true);
  }
}

他のヒント

私はあなたのような同じ問題を持っていたし、これは私がそれを解決する方法です。

あなたは、オブジェクトの最終(最終CastleCrashシム=新しいCastleCrashを();)作ることができるのいずれかが、私はそれを行うにはしたくなかった、またはあなたが他のクラスのメソッドを実行するためのsetterメソッドのようなものを作ることができます。

リスナークラスのための私のコード:

button1a.addActionListener(new ActionListener()
{

    public void actionPerformed (ActionEvent event)
    {
    //How to make this work ?
    //Like this:
    runCC();
    }
});

public void runCC()
{
    CastleCrash sim = new CastleCrash();
    sim.runCastleCrash();
}

他のクラスのための私のコード:

public void runCastleCrash()
{   
    System.out.println("Castle Crash is beginning...");
    //Other method parts here to be added
}

この希望が便利です、幸運! :)

マクドウェルは、すでにイベントリスナー(または一般に匿名内部クラス)から変数にアクセスする方法についての良い例と実質的に答えます。スイング中のイベント・リスナーのより一般的なSunのリソースは、しかし、がありますそれは正規のある、それらを書くときに、すべての警告の良い概要を考慮に入れています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top