YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

IIn diesem Video zeige ich kurz und bündig, wie man einen kleinen, aber funktionierenden Java-Chat-Client für unseren Java-Chat-Server erstellen kann. Es wird nicht allzuviel auf genaue Funktionen eingegangen, da es zu lange dauern würde.


Quellcode

// Package muss natürlich angepasst werden
package tutcubede.chat;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringReader;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.text.BadLocationException;
import javax.swing.text.html.HTMLEditorKit;

public class Client {
	
	JFrame clientFrame;
	JPanel clientPanel;
	JTextArea textArea_Messages;
	JTextField textField_ClientMessage;
	JButton button_SendMessage;
	JTextField textField_Username;
	JScrollPane scrollPane_Messages;
	
	Socket client;
	PrintWriter writer;
	BufferedReader reader;
	
	public static void main(String[] args) {
		Client c = new Client();
		c.createGUI();
	}
	
	public void createGUI() {
		clientFrame = new JFrame("TutCubeDE-Chat");
		clientFrame.setSize(800, 600);
		
		// Panel erzeugen, welches alle anderen Inhalte enthält
		clientPanel = new JPanel();
		
		textArea_Messages = new JTextArea();
		textArea_Messages.setEditable(false);
		
		textField_ClientMessage = new JTextField(38);
		textField_ClientMessage.addKeyListener(new SendPressEnterListener());
		
		button_SendMessage = new JButton("Senden");
		button_SendMessage.addActionListener(new SendButtonListener());
		
		textField_Username = new JTextField(10);
		
		// Scrollbalken zur textArea hinzufügen
		scrollPane_Messages = new JScrollPane(textArea_Messages);
		scrollPane_Messages.setPreferredSize(new Dimension(700, 500));
		scrollPane_Messages.setMinimumSize(new Dimension(700, 500));
		scrollPane_Messages.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane_Messages.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);		
		
		
		if(!connectToServer()) {
			// Connect-Label anzeigen ob verbunden oder nicht...
		}
		
		Thread t = new Thread(new MessagesFromServerListener());
		t.start();
		
		clientPanel.add(scrollPane_Messages);
		clientPanel.add(textField_Username);
		clientPanel.add(textField_ClientMessage);
		clientPanel.add(button_SendMessage);
		
		// Panel zum ContentPane (Inhaltsbereich) hinzufügen
		clientFrame.getContentPane().add(BorderLayout.CENTER, clientPanel);
		
		clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		clientFrame.setVisible(true);
	}
	
	public boolean connectToServer() {
		try {
			client = new Socket("127.0.0.1", 5555);
			reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
			writer = new PrintWriter(client.getOutputStream());
			appendTextMessages("Netzwerkverbindung hergestellt");
			
			return true;
		} catch(Exception e) {
			appendTextMessages("Netzwerkverbindung konnte nicht hergestellt werden");
			e.printStackTrace();
			
			return false;
		}
	}
	
	public void sendMessageToServer() {
		writer.println(textField_Username.getText() + ": " + textField_ClientMessage.getText());
		writer.flush();
		
		textField_ClientMessage.setText("");
		textField_ClientMessage.requestFocus();
	}
	
	public void appendTextMessages(String message) {
		textArea_Messages.append(message + "\n");
	}
	
	// Listener
	public class SendPressEnterListener implements KeyListener {

		@Override
		public void keyPressed(KeyEvent arg0) {
			if(arg0.getKeyCode() == KeyEvent.VK_ENTER) {
				sendMessageToServer();
			}	
		}

		@Override
		public void keyReleased(KeyEvent arg0) {}

		@Override
		public void keyTyped(KeyEvent arg0) {}
		
	}
	
	public class SendButtonListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			sendMessageToServer();			
		}
		
	}
	
	public class MessagesFromServerListener implements Runnable {

		@Override
		public void run() {
			String message;
			
			try {
				while((message = reader.readLine()) != null) {
					appendTextMessages(message);
					textArea_Messages.setCaretPosition(textArea_Messages.getText().length());
				}
			} catch (IOException e) {
				appendTextMessages("Nachricht konnte nicht empfangen werden!");
				e.printStackTrace();
			}
		}
		
	}
}