import java.awt.Button; import java.awt.Color; import java.awt.Event; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.TextField; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.text.BadLocationException; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; public class Gui extends Frame { protected JTextPane outputTextbox; protected TextField inputField; private Client client = null; protected StyledDocument doc; protected Style style; public Gui(Client client) { System.out.println("starting gui..."); this.client = client; createLayout(); } public void createLayout() { setLayout(new GridBagLayout()); Insets insets = new Insets(0, 0, 0, 0); outputTextbox = new JTextPane(); outputTextbox.setEditable(false); doc = outputTextbox.getStyledDocument(); style = doc.addStyle("rgb", null); StyleConstants.setForeground(style, Color.black); add(new JScrollPane(outputTextbox), new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, insets, 0, 0)); inputField = new TextField(); add(inputField, new GridBagConstraints(0, 1, 1, 1, 1.0, 0, GridBagConstraints.SOUTH, GridBagConstraints.HORIZONTAL, insets, 0, 0)); setSize(400, 300); setVisible(true); inputField.requestFocus(); } /** * handles AWT events (enter in textfield and closing window) */ public boolean handleEvent(Event e) { if ((e.target == inputField) && (e.id == Event.ACTION_EVENT)) { String msg = (String) e.arg; send(msg); inputField.setText(""); return true; } else if ((e.target == this) && (e.id == Event.WINDOW_DESTROY)) { if (client != null) client.stop(); setVisible(false); System.exit(0); return true; } return super.handleEvent(e); } public void send(String msg) { client.send(msg); } public void onMessageReceived(String text) { try { // Text einf�gen doc.insertString(doc.getLength(), text, style); // Zeilenumbruch einf�gen doc.insertString(doc.getLength(), "\n", style); // Und bis ans Ende scrollen outputTextbox.setCaretPosition(doc.getLength()); } catch (BadLocationException e) { e.printStackTrace(); outputTextbox.setText(outputTextbox.getText() + text + "\n"); } } }