51,409
社区成员
发帖
与我相关
我的任务
分享
没人吗
我是想问动态添加jlabel的方法啦,还有我发现ManageSurface开启,按下启动按钮后,好像卡死了一样没反应了,缩小再放大就是黑了。。。
不好意思,可能我说的不够详细吧,。。。我只是写了个聊天的小程序,服务器管理界面我用一个jframe来写,
我想在里面的一个jpanel中动态添加jlabel,来表示一个用户上线
package com.qq.model;
//QQ服务器
import java.awt.*;
import java.io.*;
import java.util.*;
import java.net.*;
import com.QQ_project.common.Message;
import com.QQ_project.common.User;
import com.qq.tool.CheckUser;
public class QQServer {
ManageClient mc=new ManageClient();
Message message=new Message();
public QQServer(){
try {
ServerSocket serverSocket=new ServerSocket(9999);
//等待连接
System.out.println("服务器正在监听");
//循环接收
while(true){
Socket socket=serverSocket.accept();
ObjectInputStream oisInputStream=new ObjectInputStream(socket.getInputStream());
User user=(User)oisInputStream.readObject();
ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
//这里验证账号密码
if(new CheckUser().check_ID_Password(user.getId(), user.getPassword())){
message.setMes("1");
oos.writeObject(message);
//启动线程
Server_Client serverclient=new Server_Client(socket);
mc.addThread(user.getId(),serverclient );
serverclient.start();
//把用户显示在服务器列表
new ShowUser_Thread().show(user.getId());
//单开一个线程,让客户端保持通讯
//通知其他在线用户,该用户上线
serverclient.onlinekonw(user.getId());
}else {
message.setMes("2");
oos.writeObject(message);
socket.close();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--------------------------------------------------------------------------
package com.qq.model;
import java.sql.ResultSet;
import javax.swing.JLabel;
import com.qq.surface.ManageSurface;
import com.qq.tool.Get_User_Name;
import com.qq.tool.ManageId_Name;
import com.qq.tool.SQL_Helper;
//用于获取当前上线
//的用户,并显示到ManageSurface
public class ShowUser_Thread {
public void show(String uid){
Get_User_Name gun=new Get_User_Name();
String id=uid;
String name=gun.Get_Name(uid);
JLabel showLabel=new JLabel(id+"--------------"+name);
ManageSurface.addLabel(showLabel);
//关闭相关的连接
}
}
-------------------------------------------------------------------------
package com.qq.surface;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.text.html.HTMLDocument.Iterator;
import com.qq.model.QQServer;
import com.qq.tool.ManageId_Name;
import java.io.*;
import java.util.HashMap;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
public class ManageSurface extends JFrame implements ActionListener{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ManageSurface manageSurface=new ManageSurface();
}
//定义组件
JPanel jp1;
JButton star_jb,close_jb;
public static JPanel showUser;
JScrollPane jsp;
ManageId_Name min=new ManageId_Name();
HashMap hmMap=min.hm;
public ManageSurface(){
jp1=new JPanel();
star_jb=new JButton("开启服务器");
star_jb.addActionListener(this);
close_jb=new JButton("关闭服务器");
jp1.add(star_jb);
jp1.add(close_jb);
showUser=new JPanel();
jsp=new JScrollPane();
jsp.add(showUser);
this.add(jp1,BorderLayout.NORTH);
this.add(jsp,BorderLayout.CENTER);
this.setSize(500,400);
this.setVisible(true);
}
//该方法用于动态添加JLabel
public static void addLabel(JLabel jl){
JLabel userlJLabel=jl;
userlJLabel.setVisible(true);
System.out.println("方法正在被调用");
showUser.add(userlJLabel);
showUser.repaint();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==star_jb){
new QQServer();
}
}
}
有关的代码就像这样,能力不够,写的不好,不要见怪,请大大们不吝赐教
还有个小问题,就是我吧ManageSurface最小化后再打开就变黑了,这是怎么回事呢??