如何检测是否已从另一个类触发了动作侦听器?

问题描述 投票:0回答:1

我有一个向用户提问的方法,在我的GUI中,我有一个JTextArea,他们在其中键入答案。由于提出问题的方法在不同的类中,如何获得用户答案以返回该方法?

[GUIJFrame类):

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");
}
}

[GUIPanelJPanel类):

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循环才能检查,因此必须更好的出路。

java swing user-interface jframe jpanel
1个回答
1
投票

我不确定这是否是您要寻找的东西,因为我不知道我是否了解您的需求,但是我尝试了]]

我添加的唯一代码是方法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();

            }
© www.soinside.com 2019 - 2024. All rights reserved.