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 客户端}}