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