变量的访问

问题描述:

如果我有下面的Java代码:变量的访问

import javax.swing.JFrame; 
class GuessMyNumber extends JFrame { 
    public static void main(String[] args) { 
     InputBox box = new InputBox("Guess a number between 1 and 100:"); 
     box.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     box.setSize(360, 360); 
     box.setVisible(true); 
    } 
} 

的InputBox类:

import java.awt.FlowLayout; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
public class InputBox extends JFrame { 
    private JLabel text1; 
    private JTextField textField1; 
    public InputBox(String prompt) { 
     super("Guess My Number"); 
     setLayout(new FlowLayout()); 
     text1 = new JLabel(prompt); 
     add(text1); 
     textField1 = new JTextField(20); 
     add(textField1); 
     Handler handler = new Handler(); 
     textField1.addActionListener(handler); 
    } 
    private class Handler implements ActionListener { 
     String in = ""; 
     public void actionPerformed(ActionEvent event) { 
      if (event.getSource() == textField1) { 
       in = event.getActionCommand(); 
      } 
     } 
    } 
} 

如何访问in从主类?我是一个绝对的初学者,使用Java的GUI,所以请不要太苛刻!

感谢

+0

我不知道你想用'String'做什么,但为什么不在'actionPerformed'方法中做? – 2013-05-10 20:19:50

尽管你可以有更容易的代码妳比现在有,这里是一个解决方案:

移动的处理程序进行的InputBox或使其非私有,然后提供一个getter处理程序类。

1)

private class Handler implements ActionListener { 
     String in = ""; 
     public void actionPerformed(ActionEvent event) { 
      if (event.getSource() == textField1) { 
       in = event.getActionCommand(); 
      } 
     } 
     public String getValue(){ 
     return in; 
     } 
    } 

那么你可以通过处理对象访问它。

2)或更简单的方法是,将您的in变量声明移动InputBox并在那里提供一个getter。

+0

'Handler'类是私人的。 – 2013-05-10 20:23:49

+0

这不起作用 – MadProgrammer 2013-05-10 21:13:40

移动声明inInputBox类。您可以将框架类型设置为模态(setModal(true)),并从ActionListener中调用dispose()方法,然后您的主线程将会阻塞,直到用户输入某个数字。