我有一个向用户提问的方法,在我的GUI中,我有一个JTextArea
,他们在其中键入答案。由于提出问题的方法在不同的类中,如何获得用户答案以返回该方法?
[GUI
(JFrame
类):
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JFrame{
public GUI(String name) {
super(name);
//setSize(700,700);
setLayout(new BorderLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
JPanel myPanel1 = new GUIPanel("Center");
add(myPanel1, BorderLayout.CENTER);
pack();
setVisible(true);
setResizable(true);
}
public static void main(String[] args) {
GUI frame = new GUI("Game");
}
}
[GUIPanel
(JPanel
类):
package javaapplication2;
import java.awt.*;
import javax.swing.*;
public class GUIPanel extends JPanel {
JLabel label1;
JTextField textField1;
JLabel label2;
JTextArea textArea1;
public GUIPanel(String position) {
if (position.equals("Center")) {
createCenterPanel();
}
}
public void createCenterPanel() {
setLayout(new GridLayout(2,2,10,10));
label1 = new JLabel("Type Here: ");
textField1 = new JTextField();
textField1.setPreferredSize(new Dimension(110, 25));
label2 = new JLabel("Game Output: ");
textArea1 = new JTextArea();
add(label1);
add(textField1);
add(label2);
add(textArea1);
}
}
我尚未添加方法调用或ActionListener
类,但基本上它将调用一个会提出问题的方法,然后用户必须回答。这就是我所坚持的。我不知道如何获得一种方法来“检测”用户输入了某些内容,然后检索了数据。
我曾考虑过将文本字段设为静态,并创建一个静态布尔值,该布尔值将在触发执行的操作(用户按Enter键)时变为true,但这意味着该方法必须有一个while循环才能检查,因此必须更好的出路。
我不确定这是否是您要寻找的东西,因为我不知道我是否了解您的需求,但是我尝试了]]
我添加的唯一代码是方法getTextField1Text(),并在createCenterPanel()中调用它,如果您要添加任何内容,请告诉我,希望对您有所帮助]
public void createCenterPanel() { setLayout(new GridLayout(2, 2, 10, 10)); label1 = new JLabel("Type Here: "); textField1 = new JTextField(); textField1.setPreferredSize(new Dimension(110, 25)); label2 = new JLabel("Game Output: "); textArea1 = new JTextArea(); getTextField1Text(); add(label1); add(textField1); add(label2); add(textArea1); } public void getTextField1Text() { textField1.addActionListener(e -> { textArea1.setText(e.getActionCommand()); textField1.setText(""); }); } -------------------------------------------------------------
在评论部分中讨论之后,我试图提出一些建议新的(我希望我做到了)为您提供帮助我添加了2种方法来获取答案(注意:我使用System.out.println();仅用于测试)
这些方法已添加到GUIPanel类上
public void getAnswer() { textArea1.addActionListener(e -> { textArea1.setText(e.getActionCommand()); testAnswer(textArea1.getText()); }); } public String testAnswer(String s) { String saveParam = s; System.out.println(saveParam); return saveParam; }
在GUI类上,我做了一些小的更改,因此我可以测试方法是否在打印答案,
GUIPanel myPanel1 = new GUIPanel("Center");
public GUI(String name) {
super(name);
//setSize(700,700);
setLayout(new BorderLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
add(myPanel1, BorderLayout.CENTER);
pack();
setVisible(true);
setResizable(true);
}
public GUIPanel getMyPanel1() {
return myPanel1;
}
public static void main(String[] args) {
GUI frame = new GUI("Game");
frame.getMyPanel1().getAnswer();
}