2016-03-28 3 views
0

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

public String test(){ 
    JFrame frame=new JFrame(); 
    frame.setSize(800,600); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    JButton button=new JButton("Click Me!"); 
    frame.add(button); 
} 

Я попытался добавив ActionListener, но я не вижу никакой возможности возврата значения из родительского метода.

button.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     //A return here would not work 
    } 
}); 
+0

Вы можете обновлять объекты в форме, если они глобальны. Вместо возврата вы обновляете объект напрямую. – kevingreen

+1

Вместо 'JFrame', посмотрите на [' JOptionPane'] (https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html). Он предназначен для такого рода задач. –

ответ

2

Локальная переменная должна быть final, но ничто не мешает ему быть Collection, который затем может быть изменен.

Посмотрите на следующий код.

public String test(){ 
    // code 
    final List<String> list = new ArrayList<>(); 
    button.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      list.add("toBeReturned"); 
     } 
    }); 
    frame.add(button); 
    return list.get(0); 
} 
Смежные вопросы