2013-08-20 7 views
1

Я пытаюсь создать метод, содержащий кнопку «сгенерировать», которая позволяет возвращать значение (символьную строку или что-то еще) вызывающему классу метода всякий раз, когда я нажимаю кнопку , я пытался сделать так:Java swing: возвращаемое значение при нажатии кнопки

//start methode in "Generator" Class 
public String start() 
{ 
String format = new String(""); 

     this.generateBtn.addActionListener(new ActionListener() 
    { 
     public String actionPerformed(ActionEvent arg0) 
     { 
      //after doing operations on "format" string 

        return format; 
     } 

    }); 

и я назвал метод запуска из другого класса таким образом:

Generator genDialog =new Generator(); 
String format = genDialog.start(); 

Я получил эту ошибку в генераторе класса:

Возвращение типа несовместим с ActionListener.actionPerformed (ActionEvent)

Как я могу достичь того, что хочу? o делать? Мне нужно получить значение класса, который я назвал, когда я нажал на кнопку внутри.

+0

Это не имеет никакого смысла. Что делать, если пользователь никогда не нажимает? Вы хотите что-то вроде обещания. – SLaks

+1

Просто создайте метод, который возвращает 'String', и вызовите этот метод из метода' actionPerformed() ':-) Вы не можете изменить подписи метода actionPerformed()', это метод интерфейса, который вам нужно __define__, при реализации интерфейса, соблюдать контракт :-) –

ответ

2

Похоже, ваш класс Generator - это диалог. Если это модальный диалог, метод setVisible (true) будет блокироваться до тех пор, пока диалог не будет скрыт. Итак, что должен сделать ваш слушатель actionBtn, это сохранить сгенерированную строку в переменной-члене, а затем вызвать setVisible (false). Затем ваш метод запуска устанавливает вызовы setVisible (true) и возвращает значение.

Это будет выглядеть примерно так.

public class Generator extends JDialog { 
    private String format; 
    private JButton generateBtn; 

    public Generator() { 
     setModal(true); 
     generateBtn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       // create format string 
       setVisible(false); 
      } 
     }); 
    } 

    public String start() { 
     setVisible(true); 
     return format; 
    } 
} 
+0

Отличный !!!!! Спасибо за помощь :) – Akram

0

У вас не может быть actionPerformed() вернуть строку ... И я не вижу причины, по которой вам нужно будет. Я думаю, что вы можете выполнять любые операции, необходимые для format внутри actionPerformed().

Смежные вопросы