在JFrame中访问变量

时间:2013-05-10 20:17:02

标签: java swing jframe actionlistener

如果我有以下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初学者,所以请不要太苛刻!

由于

2 个答案:

答案 0 :(得分:1)

in的声明移至InputBox课程。您可以将帧类型设置为模态(setModal(true)),并从dispose()调用ActionListener方法,然后您的主线程将阻塞,直到用户输入一些数字。

答案 1 :(得分:0)

尽管您可以拥有比目前更简单的代码,但这是一个解决方案:

将Handler移出InputBox或将其设为非私有,然后在Handler类中提供一个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;
        }
    }

然后你可以通过Handler Object访问它。

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