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