0

如果我有以下 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);
    }
}

输入框类:

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 的绝对初学者,所以请不要太苛刻!

谢谢

4

2 回答 2

1

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

于 2013-05-10T20:22:09.547 回答
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并在那里提供一个吸气剂。

于 2013-05-10T20:19:16.500 回答