Marauroa Chat Tutorial/Swing Client
跳至導覽
跳至搜尋
Marauroa Tutorial
編碼[編輯]
Client類的設計使我們可以輕鬆地在比上面的Test類更複雜的地方使用它。 這是一個使用客戶端作為通訊工具的簡單Swing應用程式的示例
import java.awt.event.*;
import javax.swing.*;
public class View extends JFrame implements ActionListener {
private javax.swing.JButton jSayButton;
private javax.swing.JButton jConnectButton;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jChatArea;
private javax.swing.JTextField jInputField;
private javax.swing.Timer timer;
private Client client = null;
public View() {
initComponents();
jSayButton.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String message = jInputField.getText();
jInputField.setText("");
client.sendMessage(message);
}
});
jConnectButton.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
client = Client.get();
client.connect("127.0.0.1", 5555);
client.login("test1", "test1");
client.chooseCharacter("test1");
jSayButton.setEnabled(true);
jInputField.setEnabled(true);
} catch (Exception exception) {
JOptionPane.showMessageDialog(
View.this, "Error", exception.toString(), JOptionPane.WARNING_MESSAGE);
client = null;
}
}
});
timer = new javax.swing.Timer(300, this);
timer.setInitialDelay(500);
timer.start();
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (client != null) {
client.loop(0);
String s = client.popQuote();
while (s != null) {
jChatArea.append(s + "\n");
s = client.popQuote();
}
}
}
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jChatArea = new javax.swing.JTextArea();
jSayButton = new javax.swing.JButton();
jConnectButton = new javax.swing.JButton();
jInputField = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Chat 0.5");
setName("main");
jChatArea.setColumns(20);
jChatArea.setEditable(false);
jChatArea.setRows(5);
jScrollPane1.setViewportView(jChatArea);
jSayButton.setText("Say");
jSayButton.setEnabled(false);
jConnectButton.setText("Connect");
jInputField.setEnabled(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(jInputField, javax.swing.GroupLayout.PREFERRED_SIZE, 236, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSayButton, javax.swing.GroupLayout.DEFAULT_SIZE, 73, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jConnectButton)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 249, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jConnectButton)
.addComponent(jSayButton)
.addComponent(jInputField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
pack();
}
}
為了創建元素的佈局,使用了NetBeans,但是我們在這裏僅關注原始碼。
按下「連接」按鈕後,客戶端將建立到硬編碼位置的連接。 沒有「創建新帳戶」功能,因此應事先創建帳戶。
我們使用計時器來定期檢查客戶端隊列中的新消息。 如果有的話-將它們放在大文本框中。 發送新消息還取決於客戶端功能。
現在,留給Swing客戶端的唯一方法是main方法。 這是原始碼
public final class Chat {
private Chat() {}
public static void main( String[] args ) {
new View();
}
}
部署[編輯]
您仍然使用相同的命令進行編譯
javac -cp marauroa.jar;log4j.jar;. *.java
確保帶有Swing客戶端代碼的源文件與提到的jar和Client.java文件位於同一目錄中。 您可以使用以下命令運行客戶端
java -cp marauroa.jar;h2.jar;log4j.jar;. Chat
下一步[編輯]
恭喜,您已完成本教程。 最後幾節將列出一些提高遊戲可玩性的想法進一步提高的步驟. {{#breadcrumbs: Marauroa | 使用 | 教程 | Swing 客戶端}}