Интеграция Swing в простую текстовую приключенческую игру
Я довольно плохо знаком с некоторыми промежуточными понятиями в Java. Недавно я создал текстовую приключенческую игру под названием DazzleQuest, которая полностью работает в консоли разработчика / терминале. В нем участвуют мои друзья в качестве персонажей, поэтому я хотел показать им это и получить опыт работы с Java, передав функциональность командной строки и вывод с консоли на простой интерфейс Swing, состоящий изJTextArea
чтобы показать результат игры иJTextField
, сActionListener
, чтобы обрабатывать команды от пользователя.
Мой основнойDazzleQuest
класс содержит методы, называемыеrun()
а такжеhandleCommand()
Я считаю, что мне нужно интегрировать с моимFrame
класс и его подклассTextFieldHandler
[который расширяетсяActionListener
].Мне вообще интересно, как лучше интегрировать эти методы и классы. Мои нынешние попытки сбивают с толку, и, хотя у меня есть базовые знания о том, как заставить различные классы и методы общаться, это является предварительным.
Извиняюсь за многословность и отсутствие конкретики. Я хотел бы поделиться своим кодом, но не уверен, сколько и что именно дать. Если вы думаете, что можете ответить на мой вопрос, но вам нужен пример того, что у меня есть, скажите, пожалуйста. Даже псевдокод в качестве ответа был бы оценен. Спасибо! Понимание этого может быть очень полезным для моего образования в качестве программиста.
РЕДАКТИРОВАТЬ: Вот упрощенные примеры моего кода из версии игры, которая полностью работает в консоли разработчика. Это мой основной классDazzleQuest
:
public class DazzleQuest {
public void run() {
listCommands();
for (;;) {
StdOut.println(new StringBuilder("You are in ").append(currentRoom.getName()).append(".").toString());
StdOut.println(new StringBuilder("You can go to: ").append(currentRoom.listExits()).toString());
StdOut.print("> ");
handleCommand(StdIn.readLine());
StdOut.println();
}
public void handleCommand(String line) {
String[] words = line.split(" ");
if (words[0].equals("look"))
look();
}
}
}
А вот мой токJFrame
настройки, вFrame
учебный класс:
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Frame extends JFrame {
public static JTextField field;
public JTextArea area;
public Frame() {
setLayout(new FlowLayout());
area = new JTextArea(20, 40);
area.setEditable(false);
field = new JTextField(20);
add(area);
add(field);
pack();
setVisible(true);
TextFieldHandler handler = new TextFieldHandler();
field.addActionListener(handler);
}
public class TextFieldHandler implements ActionListener{
public void actionPerformed(ActionEvent event)
{
String line = field.getText();
area.append(line + "\n");
field.setText("");
}
}
public static void main(String args[]) {
Frame test = new Frame();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Я знаю, как распечатать вывод наJTextArea
вместо консоли. Моя проблема в том, как именно получитьhandleCommand()
работать сactionPerformed()
вFrame
класс, или я должен установить слушателя действия в основном классе или что-то в этом роде. Любые примеры реализации будут с благодарностью.
Еще раз спасибо за все, что вы можете сказать мне!