小弟在做一个聊天程序,所有的输入输出程序都写好了,就缺一个窗口,现在只能在终端里显示。因为之前没接触过java的绘图和窗口类,所以想找一个简单的例子参考一下,效果就是: 比如俩个客户端对话的窗口,或者客户端接收服务端来的信息,客户端可以从这个窗口发送信息给客户端(向聊天软件那样,一个窗口可以显示 比如 下面我画的:------------------------
                                               |
   user1 说:                                  |
     dsjkfhjkgfhjdfghjkdfghjkfgjkd             |
   user2 说:                                  |
     fkljfkldjgkljdklgjlkdfgljfklgd            |
                                               |
                                               |
                                               |
                                               |
                                               |
------------------------------------------------
dmsdfkjjsdkl;fjlkdsjflkjlds                    |
                                               |
                                               |
                                 +---+      |
                                 | send |      |
                                 +------+      |
-----------------------------------------------
谢谢

解决方案 »

  1.   

    package csdn;import java.awt.event.*;
    import javax.swing.*;public class ChatFrame extends JFrame{

    JTextArea show = new JTextArea();
    JTextArea send = new JTextArea(10, 30);
    JButton btn = new JButton("Send");
    JPanel p = new JPanel(); public ChatFrame()
    {
    show.setLineWrap(true);
    send.setLineWrap(true);
    show.setEditable(false);
    show.setBounds(5, 5, 490, 250);
    send.setBounds(5, 260, 490, 150);
    btn.setBounds(400, 420, 80, 40);

    setLayout(null);
    add(show);
    add(send);
    add(btn);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(500, 500);
    setVisible(true);

    btn.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
    if (send.getText().equals(""))
    return;
    show.append(send.getText() + "\n");
    send.setText("");
    send.requestFocusInWindow();
    }
    });
    }

    public static void main(String[] args)
    {
    new ChatFrame();
    }}
      

  2.   

    用个ide,都有gui设计的,直接可视化设计。
      

  3.   

    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;public class ChatFrame extends JFrame{
    private JScrollPane jspane;
    private JPanel jpane = new JPanel();
    private JTextArea jta = new JTextArea();
    private JButton jbtnSend = new JButton("send");
    private JTextArea jtamessage = new JTextArea();
    private String userID = "test";
    private String message = "";

    public ChatFrame() {
    init();
    }

    private void init() {
    this.setTitle("chat");
    this.setSize(400,320);
    jspane = new JScrollPane(jtamessage);
    jtamessage.setEditable(false);
    jpane.setLayout(null);
    jpane.add(jta);
    jta.setBounds(0,0,300,60);
    jta.setBorder(BorderFactory.createEtchedBorder(0, Color.white,
    Color.GRAY));
    jpane.add(jbtnSend);
    jbtnSend.setBounds(300,10,80,40);
    jbtnSend.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    sendMessage();
    }
    });
    this.getContentPane().add(jspane);
    this.getContentPane().add(jpane);
    this.getContentPane().setLayout(null);
    jspane.setBounds(10,10,380,200);
    jpane.setBounds(10,210,380,90);
    }

    private void sendMessage() {
    message = this.jta.getText();
    if (!message.equals("")) {
    this.jtamessage.append(userID + " says :\r\n" + "    " + message + "\r\n");
    this.jta.setText("");
    }
    }

    public static void main(String[] args) {
    ChatFrame frame = new ChatFrame();
    frame.show();
    }
    }
      

  4.   

    package dccserverconfig;import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.Rectangle;
    import java.awt.Font;/**
     * <p>Title: </p>
     * <p>Description: PowerView 4.0 Develop</p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: ASAT Solutions. Inc.</p>
     * @author Michael Yang
     * @version 1.0
     */public class winLogin
        extends JDialog {
      JPanel panel1 = new JPanel();
      JLabel jLabel1 = new JLabel();
      JLabel jLabel2 = new JLabel();
      JPasswordField oppass_PasswordField = new JPasswordField();
      JButton button_ok = new JButton();
      JButton button_cancel = new JButton();
      JLabel msg_label = new JLabel();
      JLabel jLabel3 = new JLabel();
      JTextField station_IP_textBox = new JTextField();
      JTextField login_name_text = new JTextField();
      public winLogin(Frame frame, String title, boolean modal) {
        super(frame, title, modal);
        try {
          jbInit();
          pack();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }  public winLogin(Dialog frame, String title, boolean modal) {
        super(frame, title, modal);
        try {
          jbInit();
          pack();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }  public winLogin(Dialog parent) {
        this(parent, "", false);
      }  public winLogin(Frame parent) {
       this(parent, "", false);
     }  private void jbInit() throws Exception {
        jLabel1.setFont(new java.awt.Font("Arial", Font.PLAIN, 12));
        jLabel1.setOpaque(false);
        jLabel1.setRequestFocusEnabled(true);
        jLabel1.setToolTipText("");
        jLabel1.setHorizontalAlignment(SwingConstants.RIGHT);
        jLabel1.setText("Name:");
        jLabel1.setBounds(new Rectangle(18, 56, 76, 22));
        this.setFont(new java.awt.Font("Arial", 0, 12));
        this.setModal(true);
        this.setResizable(false);
        this.setTitle("Login Window");
        panel1.setLayout(null);
        jLabel2.setFont(new java.awt.Font("Arial", 0, 12));
        jLabel2.setToolTipText("");
        jLabel2.setHorizontalAlignment(SwingConstants.RIGHT);
        jLabel2.setHorizontalTextPosition(SwingConstants.TRAILING);
        jLabel2.setText("Password:");
        jLabel2.setBounds(new Rectangle(17, 80, 76, 22));
        oppass_PasswordField.setFont(new java.awt.Font("Arial", 0, 12));
        oppass_PasswordField.setToolTipText("");
        oppass_PasswordField.setText("");
        oppass_PasswordField.setBounds(new Rectangle(111, 82, 197, 22));
        oppass_PasswordField.addMouseListener(new
                                              winLogin_oppass_PasswordField_mouseAdapter(this));
        oppass_PasswordField.addFocusListener(new
                                              winLogin_oppass_PasswordField_focusAdapter(this));
        button_ok.setBounds(new Rectangle(57, 133, 74, 24));
        button_ok.setFont(new java.awt.Font("Arial", 0, 12));
        button_ok.setText("OK");
        button_ok.addActionListener(new winLogin_button_ok_actionAdapter(this));
        button_cancel.setBounds(new Rectangle(181, 133, 74, 24));
        button_cancel.setFont(new java.awt.Font("Arial", 0, 12));
        button_cancel.setSelected(false);
        button_cancel.setText("Cancel");
        button_cancel.addActionListener(new winLogin_button_cancel_actionAdapter(this));
        panel1.setFont(new java.awt.Font("Arial", 0, 12));
        panel1.setMaximumSize(new Dimension(315, 140));
        panel1.setMinimumSize(new Dimension(315, 140));
        panel1.setOpaque(false);
        panel1.setPreferredSize(new Dimension(320, 160));
        this.setResizable(false);
        panel1.setRequestFocusEnabled(true);
        panel1.setToolTipText("");
        panel1.setVerifyInputWhenFocusTarget(true);
        msg_label.setFont(new java.awt.Font("Arial", 0, 12));
        msg_label.setForeground(Color.red);
        msg_label.setHorizontalAlignment(SwingConstants.CENTER);
        msg_label.setBounds(new Rectangle(49, 108, 266, 22));
        jLabel3.setFont(new java.awt.Font("宋体", Font.PLAIN, 14));
        jLabel3.setHorizontalAlignment(SwingConstants.RIGHT);
        jLabel3.setText("维护站点IP");
        jLabel3.setBounds(new Rectangle(0, 25, 94, 22));
        station_IP_textBox.setFont(new java.awt.Font("宋体", Font.PLAIN, 14));
        station_IP_textBox.setText("127.0.0.1");
        station_IP_textBox.setBounds(new Rectangle(111, 22, 197, 22));
        login_name_text.setFont(new java.awt.Font("宋体", Font.PLAIN, 14));
        login_name_text.setText("Admin");
        login_name_text.setBounds(new Rectangle(111, 56, 197, 22));
        this.getContentPane().add(panel1, BorderLayout.CENTER);
        panel1.add(jLabel2, null);
        panel1.add(oppass_PasswordField, null);
        panel1.add(jLabel1, null);
        panel1.add(jLabel3);
        panel1.add(station_IP_textBox);
        panel1.add(login_name_text);
        panel1.add(msg_label, null);
        panel1.add(button_ok, null);
        panel1.add(button_cancel, null);
      }  void button_ok_actionPerformed(ActionEvent e) {
      }  void button_cancel_actionPerformed(ActionEvent e) {
      }  void oppass_PasswordField_focusGained(FocusEvent e) {  }  void oppass_PasswordField_mouseClicked(MouseEvent e) {  }}class winLogin_button_ok_actionAdapter
        implements java.awt.event.ActionListener {
      winLogin adaptee;  winLogin_button_ok_actionAdapter(winLogin adaptee) {
        this.adaptee = adaptee;
      }  public void actionPerformed(ActionEvent e) {
        adaptee.button_ok_actionPerformed(e);
      }
    }class winLogin_button_cancel_actionAdapter
        implements java.awt.event.ActionListener {
      winLogin adaptee;  winLogin_button_cancel_actionAdapter(winLogin adaptee) {
        this.adaptee = adaptee;
      }  public void actionPerformed(ActionEvent e) {
        adaptee.button_cancel_actionPerformed(e);
      }
    }class winLogin_oppass_PasswordField_focusAdapter
        extends java.awt.event.FocusAdapter {
      winLogin adaptee;  winLogin_oppass_PasswordField_focusAdapter(winLogin adaptee) {
        this.adaptee = adaptee;
      }  public void focusGained(FocusEvent e) {
        adaptee.oppass_PasswordField_focusGained(e);
      }
    }class winLogin_oppass_PasswordField_mouseAdapter
        extends java.awt.event.MouseAdapter {
      winLogin adaptee;  winLogin_oppass_PasswordField_mouseAdapter(winLogin adaptee) {
        this.adaptee = adaptee;
      }  public void mouseClicked(MouseEvent e) {
        adaptee.oppass_PasswordField_mouseClicked(e);
      }
    }
      

  5.   

    学习下Swing,应该不是问题的。
      

  6.   

    最简单的应该是用java swing & socket实现了
      

  7.   

    我写的,你可以参考下:
    简单的聊天室程序
    服务器端:
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;public class Server extends JFrame implements ActionListener {
        private JPanel contendPanel = new JPanel();    private JPanel NORTHPanel = new JPanel();    private JPanel CENTERPanel = new JPanel();    private JPanel SOUTHPanel = new JPanel();    private JButton jbtnStart = new JButton("Start");    private JButton jbtnStop = new JButton("Stop");    private JButton jbtnSend = new JButton("Send");    private JTextArea jTxtAreaInfo = new JTextArea();    private JTextField jTxtSendInfo = new JTextField();    private JScrollPane jsPaneInfo = new JScrollPane(jTxtAreaInfo);    private ServerSocket server = null;    private Socket socket = null;    ServerStar serstar = new ServerStar();    Thread startThread = new Thread(serstar);    public Server() {
            contendPanel.setLayout(new BorderLayout());
            contendPanel.add(NORTHPanel, BorderLayout.NORTH);
            contendPanel.add(CENTERPanel, BorderLayout.CENTER);
            contendPanel.add(SOUTHPanel, BorderLayout.SOUTH);
            NORTHPanel.add(jbtnStart);
            NORTHPanel.add(jbtnStop);
            CENTERPanel.setLayout(new GridLayout(1, 1));
            CENTERPanel.add(jsPaneInfo);
            SOUTHPanel.setLayout(new GridLayout());
            SOUTHPanel.add(jTxtSendInfo);
            SOUTHPanel.add(jbtnSend);
            jbtnStart.addActionListener(this);
            jbtnStop.addActionListener(this);
            jbtnSend.addActionListener(this);
            this.getContentPane().add(contendPanel);
            this.setSize(500, 400);
            this.setTitle("Server");
            this.setVisible(true);
        }    protected void processWindowEvent(WindowEvent e) {
            super.processWindowEvent(e);
            if (e.getID() == WindowEvent.WINDOW_CLOSING) {
                System.exit(0);
            }
        }    public static void main(String[] args) {
            Server serobj = new Server();
        }    public void actionPerformed(ActionEvent e) {
            if (e.getSource() == jbtnStart) {            startThread.start();
            }
            if (e.getSource() == jbtnStop) {
                try {
                    socket.close();
                    server.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (e.getSource() == jbtnSend) {
                try {
                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                    String strSendInfo = jTxtSendInfo.getText();
                    jTxtSendInfo.setText("");
                    out.println(strSendInfo);
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }    private class GetClientInfo implements Runnable {
            public GetClientInfo(Socket s) {
                socket = s;
            }        public void run() {
                BufferedReader in;
                while (true) {
                    try {
                        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        String str = in.readLine();
                        System.out.println(str);
                        jTxtAreaInfo.append(str);
                        jTxtAreaInfo.append("\n");
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }    private class ServerStar implements Runnable {
            public void run() {
                try {
                    if (server == null && socket == null) {
                        try {
                            server = new ServerSocket(8005);
                            System.out.println("Server is starting...");
                            try {
                                while (true) {
                                    socket = server.accept();
                                    System.out.println(socket.getInetAddress());
                                    System.out.println(socket.getLocalPort());                                GetClientInfo getinfo = new GetClientInfo(socket);
                                    Thread thread = new Thread(getinfo);
                                    thread.start();
                                }
                            } catch (Exception e1) {
                                e1.printStackTrace();
                            }
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                    }
                } catch (Exception e1) {
                }
            }
        }
    }
      

  8.   

    客户端:
    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowEvent;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;public class Client extends JFrame implements ActionListener {
        private JPanel contendPanel = new JPanel();    private JPanel NORTHPanel = new JPanel();    private JPanel CENTERPanel = new JPanel();    private JPanel SOUTHPanel = new JPanel();    private JLabel jlblIP = new JLabel("IP:");    private JLabel jlblPort = new JLabel("Port:");    private JTextField jTxtSerIP = new JTextField("127.0.0.1");    private JTextField jTxtSerPort = new JTextField("8005");    private JButton jbtnCon = new JButton("Connect");    private JButton jbtnSend = new JButton("Send");    private JTextArea jTxtAreaInfo = new JTextArea();    private JTextField jTxtSendInfo = new JTextField();    private JScrollPane jsPaneInfo = new JScrollPane(jTxtAreaInfo);    private InetAddress addr = null;    private Socket socket = null;    public Client() {
            contendPanel.setLayout(new BorderLayout());
            contendPanel.add(NORTHPanel, BorderLayout.NORTH);
            contendPanel.add(CENTERPanel, BorderLayout.CENTER);
            contendPanel.add(SOUTHPanel, BorderLayout.SOUTH);
            NORTHPanel.add(jlblIP);
            NORTHPanel.add(jTxtSerIP);
            NORTHPanel.add(jlblPort);
            NORTHPanel.add(jTxtSerPort);
            NORTHPanel.add(jbtnCon);
            CENTERPanel.setLayout(new GridLayout(1, 1));
            CENTERPanel.add(jsPaneInfo);
            SOUTHPanel.setLayout(new GridLayout());
            SOUTHPanel.add(jTxtSendInfo);
            SOUTHPanel.add(jbtnSend);
            jbtnCon.addActionListener(this);
            jbtnSend.addActionListener(this);
            this.getContentPane().add(contendPanel);
            this.setSize(500, 400);
            this.setTitle("Client");
            this.setVisible(true);
        }    protected void processWindowEvent(WindowEvent e) {
            super.processWindowEvent(e);
            if (e.getID() == WindowEvent.WINDOW_CLOSING) {
                System.exit(0);
            }
        }    public static void main(String[] args) {
            Client cliobj = new Client();
        }    public void actionPerformed(ActionEvent e) {
            if (e.getSource() == jbtnCon) {
                String strIP = jTxtSerIP.getText();
                int iPort = Integer.parseInt(jTxtSerPort.getText());
                try {
                    addr = InetAddress.getByName(strIP);
                    socket = new Socket(addr, iPort);
                    System.out.println("socket = " + socket);                GetServerInfo getinfo = new GetServerInfo();
                    Thread thread = new Thread(getinfo);
                    thread.start();
                } catch (UnknownHostException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (e.getSource() == jbtnSend) {
                try {
                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                    String strSendInfo = jTxtSendInfo.getText();
                    jTxtSendInfo.setText("");
                    out.println(strSendInfo);
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }    }    private class GetServerInfo implements Runnable {
            public void run() {
                BufferedReader in;
                while (true) {
                    try {
                        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        String str = in.readLine();
                        jTxtAreaInfo.append(str);
                        jTxtAreaInfo.append("\n");
                        // return;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
      

  9.   

    楼主自己看下SWING啊 这个很容易的,你会输出入在看下SWING编程应该不是问题 何况这个很好学 别人做的总是别人的方案 没自己预期的好啊