聊天程序客户端中,用户设置UserConf和连接用户ConnectConf函数该怎么写
package ChatServer;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import *;
import *;
public class ChatClient extends JFrame implements ActionListener{
String ip="192.168.191.1";
int port=8000;
String userName="张三";
int type=0;
JComboBox combobox;
JTextArea messageShow;
JScrollPane messageScrollPane;
JLabel express,sendToLabel,messageLabel;
JTextField clientMessage;
JCheckBox checkbox;
JComboBox actionlist;
JButton clientMessageButton;
JTextField showStatus;
Socket socket;
ObjectOutputStream output;
ObjectInputStream input;
ClientReceive recvThread;
JMenuBar jMenuBar=new JMenuBar(); //菜单项
JMenu operateMenu=new JMenu("操作(O)"); //菜单组
//菜单项
JMenuItem loginItem=new JMenuItem("用户登录(I)");
JMenuItem logoffItem=new JMenuItem("用户注销(L)");
JMenuItem exitItem=new JMenuItem("退出(X)");
JMenu conMenu=new JMenu("设置(C)");
JMenuItem userItem=new JMenuItem("用户设置(U)");
JMenuItem connectItem=new JMenuItem("连接设置(C)");
JMenu helpMenu=new JMenu("帮助(H)");
JMenuItem helpItem=new JMenuItem("帮助(H)");
JToolBar toolBar=new JToolBar(); //工具栏
JButton loginButton;
JButton logoffButton;
JButton userButton;
JButton connectButton;
JButton exitButton;
Dimension faceSize=new Dimension(400,600);
JPanel downPanel;
GridBagLayout gridBag;
GridBagConstraints gridBagCon;
public ChatClient()
{
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setSize(faceSize);
show();
Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((int)(screenSize.width-faceSize.getWidth())/2, (int)(screenSize.width-faceSize.getWidth())/2);
this.setResizable(false);
this.setTitle("聊天室客户端");
}
public void init()
{
Container contentPane=getContentPane();
contentPane.setLayout(new BorderLayout());
operateMenu.add(loginItem);
operateMenu.add(logoffItem);
operateMenu.add(exitItem);
jMenuBar.add(operateMenu);
conMenu.add(userItem);
conMenu.add(connectItem);
jMenuBar.add(conMenu);
helpMenu.add(helpItem);
jMenuBar.add(helpMenu);
setJMenuBar(jMenuBar);
loginButton=new JButton("登录");
logoffButton=new JButton("注销");
userButton=new JButton("用户设置");
connectButton=new JButton("连接设置");
exitButton=new JButton("退出");
logoffButton.setToolTipText("连接到指定的服务器");
logoffButton.setToolTipText("与服务器断开断开连接");
userButton.setToolTipText("设置用户信息");
connectButton.setToolTipText("设置所要连接的服务器信息");
toolBar.add(userButton);
toolBar.add(connectButton);
toolBar.addSeparator();
toolBar.add(exitButton);
contentPane.add(toolBar, BorderLayout.NORTH);
checkbox=new JCheckBox("悄悄话");
checkbox.setSelected(false);
actionlist=new JComboBox();
actionlist.addItem("微笑地");
actionlist.addItem("高兴地");
actionlist.addItem("轻轻地");
actionlist.addItem("生气的");
actionlist.addItem("小心的");
actionlist.addItem("静静地");
actionlist.setSelectedIndex(0);
loginButton.setEnabled(true);
logoffButton.setEnabled(false);
loginItem.addActionListener(this);
logoffItem.addActionListener(this);
exitButton.addActionListener(this);
userItem.addActionListener(this);
connectItem.addActionListener(this);
exitItem.addActionListener(this);
userItem.addActionListener(this);
connectItem.addActionListener(this);
helpItem.addActionListener(this);
loginButton.addActionListener(this);
logoffButton.addActionListener(this);
userButton.addActionListener(this);
connectButton.addActionListener(this);
exitButton.addActionListener(this);
combobox=new JComboBox();
combobox.insertItemAt("所有人", 0);
combobox.setSelectedItem(0);
messageShow=new JTextArea();
messageShow.setEditable(false);
messageScrollPane=new JScrollPane(messageShow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
messageScrollPane.setPreferredSize(new Dimension(400,400));
messageScrollPane.revalidate();
clientMessage=new JTextField(23);
clientMessage.setEnabled(false);
clientMessageButton=new JButton();
clientMessageButton.setText("发送");
clientMessage.addActionListener(this);
clientMessageButton.addActionListener(this);
sendToLabel=new JLabel("发送至");
express=new JLabel(" 表情 ");
messageLabel=new JLabel("发送信息");
downPanel=new JPanel();
gridBag=new GridBagLayout();
downPanel.setLayout(gridBag);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=0;
gridBagCon.gridy=0;
gridBagCon.gridwidth=5;
gridBagCon.gridheight=2;
gridBagCon.ipadx=5;
gridBagCon.ipady=5;
JLabel none=new JLabel(" ");
gridBag.setConstraints(none, gridBagCon);
downPanel.add(none);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=0;
gridBagCon.gridy=2;
gridBagCon.insets=new Insets(1,0,0,0);
gridBag.setConstraints(sendToLabel, gridBagCon);
downPanel.add(sendToLabel);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=1;
gridBagCon.gridy=2;
gridBagCon.anchor =GridBagConstraints.LINE_START;
gridBag.setConstraints(combobox, gridBagCon);
downPanel.add(combobox);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=2;
gridBagCon.gridy=2;
gridBagCon.anchor =GridBagConstraints.LINE_END;
gridBag.setConstraints(express, gridBagCon);
downPanel.add(express);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=3;
gridBagCon.gridy=2;
gridBagCon.anchor =GridBagConstraints.LINE_START;
gridBag.setConstraints(actionlist, gridBagCon);
downPanel.add(actionlist);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=4;
gridBagCon.gridy=2;
gridBagCon.insets =new Insets(1,0,0,0);
gridBag.setConstraints(checkbox, gridBagCon);
downPanel.add(checkbox);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=0;
gridBagCon.gridy=3;
gridBag.setConstraints(messageLabel, gridBagCon);
downPanel.add(messageLabel);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=1;
gridBagCon.gridy=3;
gridBagCon.gridwidth=3;
gridBagCon.gridheight=1;
gridBag.setConstraints(clientMessage, gridBagCon);
downPanel.add(clientMessage);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=4;
gridBagCon.gridy=3;
gridBag.setConstraints(clientMessageButton, gridBagCon);
downPanel.add(clientMessageButton);
showStatus=new JTextField(35);
showStatus.setEditable(false);
gridBagCon=new GridBagConstraints();
gridBagCon.gridx=0;
gridBagCon.gridy=5;
gridBagCon.gridwidth=5;
gridBag.setConstraints(showStatus, gridBagCon);
downPanel.add(showStatus);
contentPane.add(messageScrollPane, BorderLayout.CENTER);
contentPane.add(downPanel, BorderLayout.SOUTH);
this.addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(type==1)
{
DisConnect();
}
System.exit(0);
}
}
);
}
public void actionPerformed(ActionEvent e)
{
Object obj=e.getSource();
if(obj==userItem||obj==userButton)
{
UserConf userConf=new UserConf(this,userName);
userConf.show();
userName=userConf.userInputName;
}
else if(obj==connectItem||obj==connectButton)
{
ConnectConf conConf=new ConnectConf(this,ip,port);
conConf.show();
ip=conConf.userInputIP;
port=conConf.userInputPort;
}
else if(obj==loginItem||obj==loginButton)
{
Connect();
}
else if(obj==logoffItem||obj==logoffButton)
{
DisConnect();
showStatus.setText("");
}
else if(obj==clientMessage||obj==clientMessageButton)
{
SendMessage();
clientMessage.setText("");
}
else if(obj==exitButton||obj==exitItem)
{
int j=JOptionPane.showConfirmDialog(this,"真的要退出吗?","退出", JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if(j==JOptionPane.YES_OPTION)
{
if(type==1)
DisConnect();
System.exit(0);
}
}
else if(obj==helpItem)
{
Help helpDialog=new Help();
helpDialog.show();
}
}
public void Connect()
{
try
{
socket=new Socket(ip,port);
}
catch(Exception e)
{
JOptionPane.showConfirmDialog(this,"不能连接到指定的服务器.\n请确认连接设置是否正确.","提示", JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
return;
}
try
{
output=new ObjectOutputStream(socket.getOutputStream());
output.flush();
input=new ObjectInputStream(socket.getInputStream());
output.writeObject(userName);
output.flush();
recvThread=new ClientReceive(socket,output,input,combobox,messageShow,showStatus);
recvThread.start();
loginButton.setEnabled(false);
loginItem.setEnabled(false);
userButton.setEnabled(false);
userItem.setEnabled(false);
connectButton.setEnabled(false);
connectItem.setEnabled(false);
logoffItem.setEnabled(true);
logoffButton.setEnabled(true);
clientMessage.setEnabled(true);
messageShow.append("连接服务器"+ip+":"+port+"成功..\n");
type=1;
}
catch(Exception e)
{
System.out.println(e);
return;
}
}
public void DisConnect()
{
loginButton.setEnabled(true);
loginItem.setEnabled(true);
userButton.setEnabled(true);
userItem.setEnabled(true);
connectButton.setEnabled(true);
connectItem.setEnabled(true);
logoffItem.setEnabled(false);
logoffButton.setEnabled(false);
clientMessage.setEnabled(false);
if(socket.isClosed())
{
return;
}
try
{
output.writeObject("用户下线");
output.flush();
input.close();
output.close();
socket.close();
messageShow.append("已经与服务器断开连接...\n");
type=0;
}
catch(Exception e)
{
}
}
public void SendMessage()
{
String toSomebody=combobox.getSelectedItem().toString();
String status="";
if(checkbox.isSelected())
{
status="悄悄话";
}
String action=actionlist.getSelectedItem().toString();
String message=clientMessage.getText();
if(socket.isClosed())
{
return;
}
try
{
output.writeObject("聊天信息");
output.flush();
output.writeObject(toSomebody);
output.flush();
output.writeObject(status);
output.flush();
output.writeObject(action);
output.flush();
output.writeObject(message);
output.flush();
}
catch(Exception e)
{
}
}
public static void main(String[] args) {
// TODO Auto-generated method
ChatClient app=new ChatClient();
}
}
//ServerReceive 类
package ChatServer;
import javax.swing.*;
import *;
import *;
public class ServerReceive extends Thread{
JTextArea textarea;
JTextField textfield;
JComboBox combobox;
Node client;
UserLinkList userLinkList;
public boolean isStop;
public ServerReceive(JTextArea textarea,JTextField textfield,JComboBox combobox,Node client,UserLinkList userLinkList)
{
this.textarea=textarea;
this.textfield=textfield;
this.client=client;
this.userLinkList=userLinkList;
isStop=false;
}
public void run()
{
sendUserList();
while(!isStop&&!client.socket.isClosed())
{
try
{
String type=(String)client.input.readObject();
if(type.equals("聊天信息"))
{
String toSomebody=(String)client.input.readObject();
String status=(String)client.input.readObject();
String action=(String)client.input.readObject();
String message=(String)client.input.readObject();
String msg=client.username+" "+action+"对 "+toSomebody+"说:"+message+"\n";
if(status.equalsIgnoreCase("悄悄话"))
{
msg="[悄悄话]"+msg;
}
textarea.append(msg);
if(toSomebody.equalsIgnoreCase("所有人"))
{
sendToAll(msg);
}
else
{
try
{
client.output.writeObject("聊天信息");
client.output.flush();
client.output.writeObject(msg);
client.output.flush();
}
catch(Exception e)
{
}
Node node=userLinkList.findUser(toSomebody);
if(node!=null)
{
node.output.writeObject("聊天信息");
node.output.flush();
node.output.writeObject(msg);
node.output.flush();
}
}
}
else if(type.equalsIgnoreCase("用户下线"))
{
Node node=userLinkList.findUser(client.username);
userLinkList.delUser(node);
String msg="用户 "+client.username+"下线\n";
int count=userLinkList.getCount();
combobox.removeAllItems();
combobox.addItem("所有人");
int i=0;
while(i<count)
{
node=userLinkList.findUser(i);
if(node==null)
{
i++;
continue;
}
combobox.addItem(node.username);
i++;
}
combobox.setSelectedIndex(0);
textarea.append(msg);
textfield.setText("在线用户 "+userLinkList.getCount()+"人\n");
sendToAll(msg);
sendUserList();
break;
}
}
catch(Exception e)
{
}
}
}
public void sendUserList()
{
String userlist=" ";
int count=userLinkList.getCount();
int i=0;
while(i<count)
{
Node node=userLinkList.findUser(i);
if(node==null)
{
i++;
continue;
}
try
{
node.output.writeObject("用户列表");
node.output.flush();
node.output.writeObject(userlist);
node.output.flush();
}
catch(Exception e )
{
}
i++;
}
}
public void sendToAll(String msg)
{
int count=userLinkList.getCount();
int i=0;
while(i<count)
{
Node node=userLinkList.findUser(i);
if(node==null)
{
i++;
continue;
}
try
{
node.output.writeObject("聊天信息");
node.output.flush();
node.output.writeObject(msg);
node.output.flush();
}
catch(Exception e)
{
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}