我對Java中的某些中間概念相當陌生。最近我做了一個名爲DazzleQuest的文本冒險遊戲,它完全在開發者控制檯/終端中運行。它讓我的朋友們成爲角色,所以我想通過將命令行和控制檯輸出的功能轉移到一個簡單的Swing界面中,讓他們看到他們並獲得Java體驗,包括一個JTextArea
以顯示遊戲輸出和一個JTextField
,與ActionListener
,處理來自用戶的命令。將Swing集成到一個簡單的文本冒險遊戲中
我的主要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()
在Frame
類中使用actionPerformed()
,或者我應該在主類中設置一個動作偵聽器或類似的東西。任何實施的例子將不勝感激。
再次感謝您的任何事情,你可以告訴我!
非常感謝您的回答!演示文稿和業務邏輯的分離對我來說是一個有趣的主題 - 我曾經做過一個遊戲,其中包含遊戲規則和邏輯的「Model」類與包含顯示方法,控件的主遊戲類分離以及遊戲的開始和結束。這是你的意思嗎?我將嘗試明天覆制我的實現示例,並提供更具體的建議。 – speers
@speers是的。這聽起來像我的意思。 [MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)模式非常標準,並有很好的理由。它使得更換用戶界面變得更加容易,而不會改變執行數據處理的邏輯。 – Chewtoy
我會牢記這一點。我目前的程序非常簡單,我想我可以很容易地將模型與顯示分開,但是在我已經想出如何使其在GUI中運行後,可能會這樣做。我只是用代碼示例更新了我的帖子,所以如果你可以再看一看,那將是非常棒的! – speers