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