/* * Created on 28.jan.2004 * */ package no.ntnu.fp.net.separat.client; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; /** * @author Geir Vevle * * This chat client GUI is made just as an experiment. Also used as a demo program in TTM4100 on NTNU 2005. */ public class Gui extends JFrame { private JTextArea messages; private JTextField inputFelt; private JList loggedOn; private JPanel hoved; private ChatClient target; public Gui(String title, ChatClient target) { super(title); this.setSize(500, 400); this.placeComponents(); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { Gui.this.target.disconnect(); System.exit(0); } }); this.setVisible(true); this.target = target; messages.setEditable(false); inputFelt.requestDefaultFocus(); inputFelt.requestFocus(); } private void placeComponents() { this.getContentPane().add(hoved = new JPanel(new BorderLayout())); hoved.add(new JPanel().add(messages = new JTextArea()), BorderLayout.CENTER); hoved.add(new JPanel().add(loggedOn = new JList()), BorderLayout.EAST); hoved.add(new JPanel().add(inputFelt = new JTextField()), BorderLayout.SOUTH); loggedOn.setPreferredSize(new Dimension(100, 400)); loggedOn.setBorder(BorderFactory.createLineBorder(Color.BLACK)); messages.setBorder(BorderFactory.createLineBorder(Color.BLACK)); inputFelt.setBorder(BorderFactory.createLineBorder(Color.BLACK)); loggedOn.setListData(new Vector()); inputFelt.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_ENTER) { sendMessage(inputFelt.getText()); inputFelt.setText(""); } } }); MenuBar menubar = new MenuBar(); Menu menu = new Menu("Settings"); MenuItem item = new MenuItem("Change nick"); item.addActionListener(new AbstractAction() { public void actionPerformed(ActionEvent e) { String newName = JOptionPane.showInputDialog(Gui.this, "Enter new nick:", "Change nick", JOptionPane.PLAIN_MESSAGE); Gui.this.target.send("/newName: " + newName); Gui.this.target.setUsername(newName); } }); menu.add(item); menubar.add(menu); this.setMenuBar(menubar); } /** * tar inn en array list av String objekter og viser den til h�yre. * * @param liste */ public void updateUserList(String[] liste) { loggedOn.setListData(liste); } /** * En metode som kaller sendMessage i hovedmodulen for � sende melding. Den * kalles n�r man skriver inn tekst og trykker enter. * * @param message */ private void sendMessage(String message) { target.sendMessage(message); } /** * Tar inn en melding og viser den i chat vinduet. * * @param message * En melding * @param from * Sender av meldingen */ public void addMessage(String message, String from) { messages.append(from + ":\t" + message + "\n"); } }