Я пытаюсь сделать простую программу с графическим интерфейсом, основанным на команде (то есть введите команду и нажмите кнопку Enter). Всякий раз, когда пользователь нажимает на кнопку «Ввод», вся информация, которую они напечатали в JTextArea, обрабатывается, а затем вывод дается на основе их ввода (например, ввод /выход для закрытия программы). < /P>
В любое время, когда пользователь вводит /выходит, приглашение спрашивает, спрашивая пользователя, уверены ли они, что они хотят выйти. Однако, как только это появится, оно заменяется неверным входным сообщением, которое я вложил, если пользователь вложил что -то, что не было распознано. Моя единственная рассуждения о том, почему это происходит, заключается в том, что класс ActionListener по -прежнему хранится /выходит, хранясь в строке InputhOlder, которая является строкой, которую я использую для хранения входов пользователя и обработать их. < /P>
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();
}
}
< /code>
В настоящее время мой единственный мыслительный процесс о том, как решить это, - поместить еще одно действие, выполненное в операторе /выходе, но я не уверен, как это сделать, или если это даже лучшее решение. < /p>
Подробнее здесь: https://stackoverflow.com/questions/584 ... -statement