2014-01-29 2 views
0

У меня есть эта функция, я хочу вернуть значение, когда я нажимаю на кнопку. Я знаю, что это не работает, но как я могу это исправить? Я уже искал ее, но не мог найти что-то важное.return value from Action Listener

Мой код:

public String OutputText() 
{ 
    layout.show(mainpanel, "PANEL"); 
    testbutton.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent arg0) 
     { 
      return textfield.getText(); 
     } 
    }); 
} 
+0

Почему вы хотите, чтобы функция возвращала значение? – sanbhat

+0

что вы хотите с «возвращенным» значением? – kmera

+0

Итак, эта работа wil: 'system.out.println (OutputText()); например :) –

ответ

0

Вы не можете вернуть значение из actionPerformed() и даже если вы можете, это не будет влиять на то, что возвращаемый ваш метод OutputText(). Когда вы запустите свой OutputText(), он добавляет ActionListener к кнопке, но метод будет вызываться асинхронно только при нажатии кнопки. Вот почему между вызовом OutputText() и при вызове actionPerformed() может быть много времени.

Если вы хотите отобразить, что написано в текстовом поле, вы можете положить System.out.println(textfield.getText()) внутри метода actionPerformed().

0

Вы не можете вернуть значение из метода void. Однако вы можете распечатать его. Alternativey, вы можете вызвать метод, который возвращает значение, например:

public String returnStringValue(){ 
return textfield.getText(); 
} 
public void actionPerformed(ActionEvent arg0) { 

lblAnotherlabel.setText(returnStringValue); 
    } 

Но почему все, что, если вы можете достичь этого напрямую?

0

Вы можете использовать CallBack подход и передать возвращаемое значение обратного вызова интерфейса:

public class TestCallBack { 
    JButton testbutton; 

String value; 

public interface Callback { 
    void setResult(String result); 

} 

public class MyCallBack implements Callback { 
    @Override 
    public void setResult(String result) { 
     value = result; 
    } 
} 

public static abstract class MyActionListener implements ActionListener { 
    private Callback callback; 

    public MyActionListener(Callback callback) { 
     this.callback = callback; 
    } 

} 

public String OutputText() { 
    layout.show(mainpanel, "PANEL"); 

    testbutton.addActionListener(new MyActionListener(new MyCallBack() 

    ) { 
     public void actionPerformed(ActionEvent arg0) { 

      this.callback.setResult(textfield.getText()); 


     } 
    }); 
} 

}