簡體   English   中英

如何檢測是否已從另一個 class 觸發動作偵聽器?

[英]How to detect if a action listener has been triggered from another class?

我有一個向用戶詢問問題的方法,在我的 GUI 中我有一個JTextArea ,他們在其中輸入答案。 由於提出問題的方法在不同的 class 中,我將如何讓用戶回答返回該方法?

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 class 但基本上它會調用一個方法,該方法會提出問題,然后用戶必須回答。 這就是我所堅持的。 我不知道如何獲得“檢測”用戶輸入內容然后檢索數據的方法。

我考慮過制作文本字段 static 並制作 static boolean 當執行的操作(用戶按下回車)被觸發時它被更改為 true 以檢查循環,但這意味着必須有一種方法來檢查在那里。

我不確定這是否是您要找的東西,因為我不知道我是否理解正確您需要什么,但我嘗試了

我添加的唯一代碼是方法 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 class上添加的

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 class 上,我做了一些小改動,所以我可以測試這些方法是否正在打印答案,

            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();

            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM