2017-11-19 6 views
0

私はactionPerformed外の倍精度変数にアクセスしようとしていますが、変更はそのままです。 ドロップダウンメニューで、[OK]ボタンを押します。それを押すとパーセント値が計算され、後でプログラムで使用したい値になります。ここでJAVA - クラスの外で実行されたアクション内から変数を使用しようとしています

は、コードの抜粋です:

btn.addActionListener(
new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 

    String currentCountry = (String)cb.getSelectedItem(); 
    double percentage = 0.00; 

     if(currentCountry.equals("Brazil") || currentCountry.equals("Argentina")) { 
      cb2.removeAllItems(); 
      for(int i = 0; i < choicesSouthAmerica.length; i++) { 
       cb2.addItem(choicesSouthAmerica[i]); 
      } 
     } 

     else { 

      cb2.removeAllItems(); 
      for(int i = 0; i < choicesEurope.length; i++) { 
       cb2.addItem(choicesEurope[i]); 
      } 
     } 

    btn.setEnabled(false); 
    btn2.setEnabled(true); 

     if(currentCountry.equals("Brazil") || currentCountry.equals("Argentina")){ 
       percentage = 1/5; 
       System.out.println(percentage); 
      } 
     else{ 
       percentage = 1/8; 
       System.out.println(percentage); 
      } 
     } 
    } 

); 

あなたは次のようにputClientProperty(オブジェクト、オブジェクト)とgetClientProperty(オブジェクト)の機能を使用することができ、親切

+1

問題を示している、完全に、最小限の例で**適切にインデントされた**を投稿してください。それが何をすべきか、それが何をするのかを説明してください。 –

+0

なぜインデントがそのようになったのかわかりません、貼り付けて、インデントするためにCtrlキーを使用していましたが、代わりにこのようになりました。私はちょうど私がこのメソッドの外で二倍パーセンテージ変数を使うことができるかと思っています。 – Brow

+0

あなたが投稿したコードに変数がどれくらいあるのか、変数がどこに宣言されているのか、またコードが正しく字下げられていないためにそれを理解できないのだろうかと思います。 –

答えて

0

私はあなたが実際に必要とするものは静的なフィールドであると思います(それはどんなアクセス修飾子でも構いません)。だから私は動作するはずだと思う。このような何か:あなたは匿名クラスのスコープ外の変数を変更することはできませんので

public class Test { 

     static double d = 0; 

     public static void main(String[] args) { 
      JButton b = new JButton("ASDF"); 
      b.addActionListener(new ActionListener(){ 
       @Override 
       public void actionPerformed(ActionEvent arg0) { 
        d = 5; 
       } 

      }); 
     } 
    } 
+0

ありがとうございます。それは今のところ働いた! – Brow

+0

@newbievancouverあなたが私の答えが好きだったら、それを受け入れられたとフラグを立てることを忘れないでください。 – JAAAY

1

ありがとう:

JButton btn = new JButton("Ok"); 
    btn.putClientProperty("percentage",1.0);//or whatever initial value 
    btn.addActionListener(arg0 -> { 
     JButton source = (JButton) arg0.getSource(); 
     double per = (double)source.getClientProperty("percentage"); 
     per = (double)10/8; 
     source.putClientProperty("percentage",per); 
    }); 
    double percentage = (double)btn.getClientProperty("percentage");//or use it in any other object that has access to the btn object 
1

残念ながらJavaは、クロージャをサポートしていません。

class Percentage { 
    double p; 
} 
final Percentage p = new Percentage(); 

btn.addActionListener(
    new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      // [...] 
      p.p = 1/5; 
      // [...] 
     } 
    } 
); 

次に、あなたがあなたの匿名クラスのp.p外を介して更新割合にアクセスすることができます。原則的には、あなたがこのような何かを行うことができますので、しかし、あなたは、最後の変数にアクセスすることができます。

しかし、これはJavaではあまり意味がないので、きれいな解決策はおそらくプライベートインスタンス変数で適切なクラスを作ることです。 getterを使用して、匿名クラスの代わりにこれを使用します。

関連する問題