我在使用 Java 进行的个人项目时遇到问题。我正在创建一个接受命令并因此执行特定操作的控制台。为了接受命令,我对 JTextField 和 JButton 使用 AbstractAction 侦听器来检测何时继续。这是该代码:
//Action Listener
Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String entryText = textField.getText();
textArea.append("\n>" + entryText);
if(entryText.equals("")) {
textArea.append("\nYou entered nothing.");
textField.setText("");
}
else if(entryText.equals("/sentence")) {
textField.setText("");
int remove = 1;
SentenceCreator.SentenceCreator(textArea, textField, btnEnter);
}
else if(entryText.equals("/help")) {
textArea.append("\n");
textArea.append("\n# HELP");
textArea.append("\n/help displays this help section.");
textArea.append("\n/sentence starts the Sentence Creator.");
textArea.append("\n/clear will clear the console.");
textArea.append("\nMore functionality coming soon...");
textArea.append("\n");
textField.setText("");
}
else if(entryText.equals("/clear")) {
textArea.setText("");
textField.setText("");
}
else {
textArea.append("\nInvalid command! Enter /help for help!");
textField.setText("");
}
}
};
//Add ActionListener TextField and Button
textField.addActionListener(action);
btnEnter.addActionListener(action);
如您所见,如果用户输入/sentence,它会转到我的第二个类SentenceCreator,它负责执行该命令的功能。这是我的 SentenceCreator 类中的代码:
package console.main;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class SentenceCreator {
//String s = "14.015_AUDI";
//String[] parts = s.split("_"); //returns an array with the 2 parts
//String firstPart = parts[0]; //14.015
public static void SentenceCreator(JTextArea textArea, JTextField textField, JButton btnEnter, Action action) {
textArea.append("\n");
textArea.append("\n# Sentence Creator");
textArea.append("\nPlease enter your vocabulary word and it's part of speech:\r\ni.e. scurried verb");
Action action2 = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String entryText = textField.getText();
textArea.append("\n>" + entryText);
textArea.append("\n");
}
};
textField.addActionListener(action2);
btnEnter.addActionListener(action2);
}
}
我的主要问题是我需要能够去第二节课,等待用户输入,然后继续学习这部分程序。没有使用 AbstractAction 创建一个新的、单独的 actionListener,当我尝试输入用于第二类的新输入时,它只会返回到第一个代码块。我的解决方法是只使用这个新的 actionListener。因此,如果可能的话,我希望能够从第一个侦听器中删除 JTextField 和 JButton 并将它们添加到第二个侦听器中。然后在我完成这个类之后,它可以回到第一个类并将原始侦听器重新分配给 JTextField 和 JButton。
谢谢