2014. 12. 26. 03:04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

package prac;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.xml.stream.events.StartDocument;

public class ChatClient {
    final static String SERVER_ADDR="localhost";
    final static int SERVER_PORT=8010;
    static Socket socket;
    static volatile BufferedReader br;
    static PrintWriter pw;
    static JButton btnSend;
    static JPanel createGUI(){
        JPanel pnlLayout=new JPanel();
        pnlLayout.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        pnlLayout.setLayout(new BorderLayout());
        JPanel pnlLeft =new JPanel();
        pnlLeft.setLayout(new BorderLayout());
        final JTextField txtUserName=new JTextField(30);
        pnlLeft.add(txtUserName, BorderLayout.NORTH);
        final JTextArea txtInput =new JTextArea(5,30);
        txtInput.setEnabled(false);
        pnlLeft.add(new JScrollPane(txtInput), BorderLayout.CENTER);
        final JTextArea txtOutput =new JTextArea(10,30);
        txtOutput.setFocusable(false);
        pnlLayout.add(new JScrollPane(txtOutput), BorderLayout.SOUTH);
        pnlLayout.add(pnlLeft,BorderLayout.WEST);
        JPanel pnlRight =new JPanel();
        pnlRight.setLayout(new BorderLayout());
        final JTextArea txtUsers=new JTextArea(10,10);
        txtUsers.setFocusable(false);
        Border border=BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
        txtUsers.setBorder(border);
        pnlRight.add(txtUsers, BorderLayout.NORTH);
        JPanel pnlButtons=new JPanel();
        pnlButtons.setLayout(new GridLayout(3,1));
        final JButton btnConnect =new JButton("Connect");
        ActionListener al;
        al=new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent ae) {
                txtUserName.setFocusable(false);
                String username=txtUserName.getText().trim();
                try {
                    socket=new Socket(SERVER_ADDR, SERVER_PORT);
                    btnConnect.setEnabled(false);
                    InputStreamReader isr;
                    isr=new InputStreamReader(socket.getInputStream());
                    br=new BufferedReader(isr);
                    pw=new PrintWriter(socket.getOutputStream(), true);
                    txtOutput.append(br.readLine()+ "\n");
                    pw.println((!username.equals(""))?username:"unknown");
                    txtInput.setEnabled(true);
                    btnSend.setEnabled(true);
                    new Thread(new Runnable() {
                       
                        @Override
                        public void run() {
                            String line;
                            try {
                                while ((line=br.readLine())!=null) {
                                    if (line.charAt(0)!='!'){
                                        txtOutput.append(line+"\n");
                                        continue;
                                    }
                                    txtUsers.setText("");
                                    String[] users;
                                    users=line.substring(1).split(" ");
                                    for (String user : users) {
                                        txtUsers.append(user);
                                        txtUsers.append("\n");
                                    }
                                }
                            } catch (IOException ioe) {
                                txtOutput.append("lost the link");
                                return;
                            }
                        }
                    }).start();
                   
                } catch (Exception e) {
                    txtOutput.append("unable to connect to server");
                }
            }
        };
       
        btnConnect.addActionListener(al);
        pnlButtons.add(btnConnect);
        btnSend=new JButton("Send");
        btnSend.setEnabled(false);
        al=new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent ae) {
                pw.println(txtInput.getText());
                txtInput.setText("");
            }
        };
        btnSend.addActionListener(al);
        pnlButtons.add(btnSend);
        JButton btnQuit=new JButton("Quit");
        al=new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent ae) {
                try {
                    if(socket!=null)
                        socket.close();
                   
                } catch (IOException ioe) {
                }
                System.exit(0);
            }
        };
        btnQuit.addActionListener(al);
        pnlButtons.add(btnQuit);
        pnlRight.add(pnlButtons, BorderLayout.SOUTH);
        pnlLayout.add(pnlRight, BorderLayout.EAST);
        return pnlLayout;
    };
   
    public static void main(String[] args){
        Runnable r =new Runnable() {
           
            @Override
            public void run() {
                JFrame f =new JFrame("ChatClient");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setContentPane(createGUI());
                f.pack();
                f.setResizable(false);
                f.setVisible(true);
            }
        };
        EventQueue.invokeLater(r);
    }
}








'Java > Working-level Java' 카테고리의 다른 글

Thread 2  (0) 2015.01.14
Thread  (0) 2015.01.06
System  (0) 2015.01.06
StringBuffer / StringBuilder  (0) 2015.01.03
ChatServer  (0) 2014.12.24
Posted by af334