2017-11-15 14 views
0
public Monster createCharacterScene() { 
    String name; 
    TextField nameTextField = new TextField(); 
    nameTextField.setLocation(65, 50); 
    nameTextField.setSize(60, 10); 
    Button myButton = new Button("OK"); 
    myButton.setLocation(25, 50); 
    myButton.setSize(30, 40); 
    add(myButton); 
    add(nameTextField); 
    myButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      name = nameTextField.getText(); 
     } 
    }); 
    return null; 
} 

私はこのようにすることはできません。彼らは、 "内部クラスから参照されるローカル変数は最終的に、または効果的に最終的でなければなりません"と言います。それを行う別の方法がありますか?Java:ボタンをクリックしたときにTextFieldの値を取得したい。どうやってするの?

ありがとうございます。

PS。私はアプレットを使用しています。

答えて

0

をあなたはcreateCharacterScene()方法で直接この値を読み取ることができません。それはまだ不明だから。あなたができる唯一のことは、キー押下時にトリガされるeventHandlerを定義することです。そう、ここnameHolderますが、最初はnullを保持、誰かがイベントをトリガするとき、それは値が設定されます

final String[] nameHolder = new String[1]; 
myButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      nameHolder[0] = nameTextField.getText(); 
     } 
    }); 

Consumer<String> nameConsumer = text -> { /*You will handle event here*/}; 
myButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      nameConsumer.apply(nameTextField.getText()); 
     } 
    }); 

廉価版は、最終的な修飾のための小型の回避策を使用することです値が設定されているかどうかを確認する必要があります。

0

name擬似ファイナルを行います

final String[] name = new String[1]; 

とアクセスそれをこの方法:

name[0] = nameTextField.getText(); 
関連する問題