2017-05-11 2 views
-1

私はまだJavaを学んでいますが、これは非常に長い間苦労しています。
アクションリスナーの変数を編集できない

ボタンを押した後にブール値を設定できるようにしたいが、それは決してうまくいかない。ここで

例です。

JButton send = new JButton(); 
    Boolean click = false 

    send.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       click = true 
      } 
     }); 
    if (click){ 
      System.out.println("WORKS GOOD!!") 
    } 

しかし、変数は変更されません。

+0

あなたはそれから来るどこのいずれかのコンテキストなしのコードを掲載しました。アクションリスナーはどこに定義されていますか?あなたは 'クリック 'の状態をどこで確認していますか?あなたがそれを投稿したやり方は、同じ方法ですべてをやっているように見えます。 – azurefrog

+0

ユーザーがボタンをクリックするまでに 'if'ステートメントが既に処理されています。 –

+0

@azurefrogこれはコードのほんの一部です – KeionBeats

答えて

0

忘れてしまいます。 Javaでは、あなたがしたいことをする方法がありません。囲まれたオブジェクト(new ActionListener())内では、の最終であるため、 の最終変数に囲みタイプからの変数を読み込み、変更することはできません。

のコード例は、以下の作品として(しかし、何よりも):ところで

final Boolean click = false;  

    send.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       System.out.println("outside variable 'click' is:" + click); 
      } 
     }); 

:それはあなたがやろうと、それは良いアイデアではありませんので、Javaが、それを許可していません何が良いアイデアではありません。 .. :-)

更新:それでもやりたいのなら、あなたはラッパークラスを作ることができます。

以下のコードは動作しますが、後で教えてください。非常に悪いことではありません。

public class MyClass { 

public static void main(String[] args) { 
    JButton send = new JButton(); 
    final BooleanWrapper click = new BooleanWrapper(); 

    click.value = false; 

    send.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       click.value = true; 
      } 
     }); 

    send.getActionListeners()[0].actionPerformed(new ActionEvent(new MyClass(), 1, "very bad idea")); 

    if (click.value){ 
      System.out.println("WORKS GOOD!!"); 
    } 

} 

private static class BooleanWrapper 
{ 
    private Boolean value; 
} 

}

1

if (click)条件は、ボタンクリックが発生する前に一度だけ評価され、その時点ではfalseです。ボタンを押すたびに条件を再評価する必要があります。

ブール値の目的は何ですか?どうしてですか?

JButton send = new JButton(); 

send.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      System.out.println("WORKS GOOD!!"); 
     } 
    }); 
+0

私は知っていますが、クリックした後で変数を編集したい – KeionBeats

+0

ボタンをクリックした後にコードが変数を変更します。変数が設定されているかどうかを確認するために使用するコードは、必要なように機能しません。 – Samuel

+0

クリックした後に文字列を設定できるようにしたい – KeionBeats

関連する問題