/** * @Client.java * * Sköter det grafiska för * chatklienten. * Skapar allt vi vill ha. * * * @author Karl-Adam Karlsson * @version 1.0 06/09/30 * * */ import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * Client Klassen * */ public class Client extends JFrame { // Variabler private JTextField messageBar; private JTextField namn; private JTextArea chatWindow; private JScrollPane jScrollPane1; private JPanel contentPane; private static ioHandler myHandler; /* * Konstruktor, anropar initialize componenets som fixar till alla * komponenter så som vi vill ha dem. */ public Client() { super(); initializeComponent(); this.setVisible(true); } /** * Initialize components, * anropas av konstruktorn. * * Settar up alla komponenter. */ private void initializeComponent() { messageBar = new JTextField(); namn = new JTextField(); chatWindow = new JTextArea(); jScrollPane1 = new JScrollPane(); contentPane = (JPanel)this.getContentPane(); // messageBar, där meddelanden skrivs in // kopplar lyssnaren till messageBarAction som finns längre ned. messageBar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { messageBarAction(e); } }); // name, används för chattarens namn. namn.setText("namn"); addComponent(contentPane, namn, 590,50,80,20); // chatWindow chatWindow.setEditable(false); // jScrollPane1, för chatfönstret jScrollPane1.setViewportView(chatWindow); // contentPane contentPane.setLayout(null); addComponent(contentPane, messageBar, 14,303,574,22); addComponent(contentPane, jScrollPane1, 14,14,574,276); // Client this.setTitle("Quick-e-chat"); this.setLocation(new Point(0, 0)); this.setSize(new Dimension(700, 376)); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setResizable(false); } /** * * Add component, används för att lägga till komponenter. * Vi använder ingen manager utan kör absolute positioning. */ private void addComponent(Container container,Component c,int x,int y,int width,int height) { c.setBounds(x,y,width,height); container.add(c); } /* * Koppland till actionperformed för meddelande panelen. * Här skickar vi meddelanden. * */ private void messageBarAction(ActionEvent e) { myHandler.sendMess("<"+namn.getText()+">: "+messageBar.getText()+"\n"); messageBar.setText(""); } /** * Sätter myhandler till indatat aHandler * * */ public void setHandler(ioHandler aHandler){ myHandler = aHandler; } /* * Printar meddelanden till meddelandefönstret. */ public void printMessage(String aMess){ chatWindow.append(aMess+"\n"); } /* * MAIN * Skapar chatfönster och en ioHandler beserat på args. * * */ public static void main(String[] args) { Thread handlerThread; Client theChat; JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception ex) { System.out.println("Failed loading L&F: "); System.out.println(ex); } // Ing args, kör default. if(null == args || args.length < 1) { theChat = new Client(); myHandler = new ioHandler("127.0.0.1",2000, theChat); handlerThread = new Thread(myHandler); handlerThread.start(); // och port default bli 2000 } else if(args[0]!=null && args.length == 1){ theChat = new Client(); myHandler = new ioHandler(args[0],2000, theChat); handlerThread = new Thread(myHandler); handlerThread.start(); } else if(args[0]!=null && args[1]!=null && args.length == 2){ theChat = new Client(); Integer aport = new Integer(args[1]); myHandler = new ioHandler(args[0],aport, theChat); handlerThread = new Thread(myHandler); handlerThread.start(); } else{ System.out.println("Invalid arguments, exiting"); } } }