package chat; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; public class GUI extends JFrame { private JTextArea logArea = new JTextArea(); private JTextArea messageArea = new JTextArea(); private JButton sendButton = new JButton("Send"); public GUI(Communicator communicator) { super("Chat"); JScrollPane logPane = new JScrollPane(logArea); logPane.setBorder(BorderFactory.createTitledBorder("Log")); JPanel messagePanel = new JPanel(new BorderLayout()); messagePanel.add(new JScrollPane(messageArea), BorderLayout.CENTER); messagePanel.add(sendButton, BorderLayout.EAST); messagePanel.setBorder(BorderFactory.createTitledBorder(communicator.getName())); JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT, logPane, messagePanel); split.setResizeWeight(.75); add(split); sendButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { communicator.send(messageArea.getText()); messageArea.setText(""); }}); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent event) { communicator.quit(); dispose(); }}); setSize(640, 480); setVisible(true); } public void log(String message) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { logArea.setText(logArea.getText() + message + "\n"); }}); } }