Я пытаюсь создать простую программу с графическим интерфейсом, основанную на командной строке (т.е. введите команду и нажмите кнопку ввода). Всякий раз, когда пользователь нажимает кнопку ввода, вся информация, введенная им в JTextArea, обрабатывается, а затем выводится на основе его ввода (например, ввода / выхода для закрытия программы).
Всякий раз, когдаПользователь вводит / выходит, появляется запрос, спрашивающий пользователя, уверены ли они, что хотят выйти. Однако, как только это появляется, оно заменяется недействительным вводимым сообщением, которое я вставляю, если пользователь вводит что-то, что не было распознано. Моя единственная причина, по которой это происходит, заключается в том, что класс ActionListener все еще имеет / выход, сохраненный в строке inputHolder, которая является строкой, которую я использую для хранения входных данных пользователя и их обработки.
package msai;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MainFrame extends JFrame implements ActionListener {
JTextArea output;
JButton inputButton;
JTextArea commandLine;
String inputHolder;
String invalid = "Invalid input!";
public MainFrame() {
super("MSAI");
setLookAndFeel();
setSize(650, 350);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
FlowLayout flo = new FlowLayout();
setLayout(flo);
output = new JTextArea("Hi! I'm MSAI. Type any command to get started, or type /help for a list of commands and syntax!", 8, 40);
inputButton = new JButton("ENTER");
inputButton.addActionListener(this);
commandLine = new JTextArea(8, 40);
commandLine.setLineWrap(true);
commandLine.setWrapStyleWord(true);
JScrollPane scroll = new JScrollPane(commandLine, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
add(output);
add(inputButton);
add(scroll);
setVisible(true);
}
public void actionPerformed(ActionEvent event) {
inputHolder = commandLine.getText();
switch(inputHolder) {
"/exit":
output.setText("Are you sure you want to terminate this session?");
inputHolder = commandLine.getText();
switch(inputHolder.toUpperCase()) {
case "YES":
System.exit(0);
break;
case "NO":
output.setText("Your session has not been terminated.");
break;
default:
output.setText(invalid);
break;
}
}
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"javax.swing.plaf.nimbus.NimbusLookAndFeel"
);
} catch (Exception exc) {
//ignore error
}
}
public static void main(String[] args) {
MainFrame frame = new MainFrame();
}
}
В настоящее время мой единственныйЧтобы решить эту проблему, нужно добавить другой оператор actionPerformed в оператор / switch, но я не уверен, как это сделать, или это даже лучшее решение. Я буду рад любым ответам и отзывам, только, пожалуйста, не будьте токсичными!