如果我有以下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 :(得分: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。