📄 jim.java
字号:
//构造方法
public ShowFriendInfo(JimWin mainWin,Friend myFriend)
{
super(mainWin,"["+myFriend.fNickName+"]详细资料",true);
try
{
this.myFriend=myFriend;
showFriendInfoInit(); //初始化创建窗口
pack();
this.setSize(400,400);
this.setResizable(false);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
//初始化创建窗口
void showFriendInfoInit()throws Exception
{
String[] pics;
FilenameFilter fileFilter=new FilenameFilter(){
public boolean accept(File dir,String name){
if(name.endsWith("_1.JPG")||name.endsWith("_1.jpg")){
return true;
}
return false;
}
};
File dir=new File("face");
pics=dir.list(fileFilter);
jpBottom.setLayout(null);
this.getContentPane().setLayout(null);
jpBottom.setBounds(new Rectangle(0,0,550,550));
jlNickName.setText("昵称");
jlNickName.setBounds(new Rectangle(36,40,45,20));
jtNickName.setText(myFriend.fNickName);
jtNickName.setBounds(new Rectangle(70,40,180,22));
jlImNo.setText("JIM号");
jlImNo.setBounds(new Rectangle(27,70,45,20));
jtfImNo.setText(Integer.toString(myFriend.fImNo));
jtfImNo.setBounds(new Rectangle(70,70,180,22));
ComboBoxModel model=new HeadPicCombobox(pics);
ListCellRenderer renderer=new HeadpicCellRenderer();
jcbFace.setBounds(new Rectangle(290,40,80,50));
jcbFace.setModel(model);
jcbFace.setRenderer(renderer);
jcbFace.setSelectedIndex(myFriend.fFace-1);
jlSex.setText("性别");
jlSex.setBounds(new Rectangle(36,100,45,20));
jcbSex.setToolTipText("");
jcbSex.addItem("女");
jcbSex.addItem("男");
jcbSex.setBounds(new Rectangle(70,100,45,22));
jcbSex.setSelectedIndex(myFriend.fSex);
jlAge.setText("年龄");
jlAge.setBounds(new Rectangle(135,100,50,20));
jtfAge.setBounds(new Rectangle(170,100,40,22));
jtfAge.setText(Integer.toString(myFriend.fAge));
jlPhone.setText("电话");
jlPhone.setBounds(new Rectangle(225,100,50,20));
jtfPhone.setBounds(new Rectangle(260,100,110,22));
jtfPhone.setText(myFriend.fPhone);
jlEMail.setText("电子邮件");
jlEMail.setBounds(new Rectangle(10,130,60,20));
jtfEMail.setBounds(new Rectangle(70,130,300,22));
jtfEMail.setText(myFriend.fEMail);
jlHomePage.setText("个人主页");
jlHomePage.setBounds(new Rectangle(10,160,60,20));
jtfHomePage.setBounds(new Rectangle(70,160,300,22));
jtfHomePage.setText(myFriend.fHomePage);
jlResume.setText("个人说明");
jlResume.setBounds(new Rectangle(10,190,60,20));
jtpResume.setBounds(new Rectangle(70,190,300,110));
jtpResume.setText(myFriend.fResume);
jbOK.setText("确定");
jbOK.setBounds(new Rectangle(147,330,79,29));
jbOK.addMouseListener(new java.awt.event.MouseAdapter(){
public void mouseClicked(MouseEvent e){
jbOK_mouseClicked(e);
}
});
this.getContentPane().add(jpBottom,null);
jpBottom.add(jlNickName,null);
jpBottom.add(jtNickName,null);
jpBottom.add(jlImNo,null);
jpBottom.add(jtfImNo,null);
jpBottom.add(jcbFace,null);
jpBottom.add(jlSex,null);
jpBottom.add(jcbSex,null);
jpBottom.add(jlAge,null);
jpBottom.add(jtfAge,null);
jpBottom.add(jlPhone,null);
jpBottom.add(jtfPhone,null);
jpBottom.add(jtfEMail,null);
jpBottom.add(jlEMail,null);
jpBottom.add(jlHomePage,null);
jpBottom.add(jtfHomePage,null);
jpBottom.add(jlResume,null);
jpBottom.add(jtpResume,null);
jpBottom.add(jbOK,null);
}
void jbOK_mouseClicked(MouseEvent e)
{
this.dispose();
}
}
//AddFriend类
//该类为显示并处理增加好友类。代码入下:
class AddFriend extends JDialog
{
int friendImNo; //好友的JIM号
JimWin mainWin; //JIM界面
JLabel jlFriendImNo; //标签
JTextField jtfFriendImNo; //输入好友JIM号的文本框
JButton btnOK; //"确认"按钮
//构造方法
public AddFriend(JimWin mainWin,int friendImNo)
{
super(mianWin,"添加好友",true);
this.friendImNo=friendImNo;
this.mainWin=mainWin;
//若构造方法的参数中friendImNo参数<0表示需要GUI
if(friendImNo<0)
{
this.getContentPane().setLayout(null);
jlFriendImNo=new JLabel();
jlFriendImNo.setText("JIM号码");
jtfFriendImNo=new JTextField();
btnOK=new JButton();
btnOK.setText("加为好友");
jlFriendImNo.setBounds(new Rectangle(30,15,90,20));
jtfFriendImNo.setBounds(new Rectangle(30,40,200,22));
btnOK.setBounds(new Rectangle(80,80,100,30));
btnOK.addMouseListener(new java.awt.event.MouseAdapter(){
public void mouseClicked(MouseEvent e){
btnOK_mouseClicked(e);
}
});
this.getContentPane().add(jlFriendImNo,null);
this.getContentPane().add(jtfFriendImNo,null);
this.getContentPane().add(btnOK,null);
this.setSize(260,160);
this.setResizable(false);
}
}
void btnOK_mouseClicked(MouseEvent e)
{
try
{
//取得输入的好友JIM号
friendImNo=Integer.parseInt(jtfFriendImNo.getText().trim());
String rtn=processAddFriend();
if(!rtn.equals("OK"))
JOptionPane.showMessageDialog(this,rtn,"提示信息",JOptionPane.INFORMATION_MESSAGE);
else
jtfFriendImNo.setText("");
}
catch(Exception e1)
{
e1.printStackTrace();
}
}
//增加好友的操作
public String processAddFriend()
{
Socket socket;
BufferedReader in;
PrintWriter out;
String rtn="OK"; //默认返回值
try
{
socket=new Socket(InetAddress.getByName(mainWin.serverName),mainWin.serverPort);
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
try
{
//向服务器端增加好友请求
out.println("ADDNEWFRIEND");
out.println(friendImNo); //好友JIM号
out.println(mianWin.myImNo); //用户自己的JIM号
//以下将从服务器端读取返回的好友详细信息
String
fNickName,fImNo,fFace="",fSex,fAge,fIp,fRPort,fOnline="",fEMail,fHomePage,fPhone,fResume;
do
{
fNickName=in.readLine();
if(fNickName.equals("OVER")||fNickName.equals("FALSE"))break;
fImNo=in.readLine();
fFace=in.readLine();
fSex=in.readLine();
fAge=in.readLine();
fIp=in.readLine();
fRPort=in.readLine();
fOnline=in.readLine();
fEMail=in.readLine();
fHomePage=in.readLine();
fPhone=in.readLine();
fResume=in.readLine();
//将好友添加到好友列表中
mainWin.myFriends.add(new Friend(fNickName,fIp,fEMail,fHomePage,fPhone,fResume,Integer.parseInt(fImNo),
Integer.parseInt(fRPort),Integer.parseInt(fFace),Integer.parseInt(fSex),Integer.parseInt(fAge),Integer.parseInt(fOnline)));
}while(!fNickName.equals("OVER"));
//告诉服务器通讯结束
out.println("END");
if(!fNickName.equals("FALSE"))
{
//若服务器端增加好友操作正常,则将好友添加到JIM界面的好友列表框中
int fIndex=mainWin.myFriends.size()-1;
DefaultListModel dlm=(DefaultListModel)mainWin.jlstFriend.getModel();
if(Integer.parseInt(fOnline)==1)
dlm.addElement(new Object[]{((Friend)mainWin.myFriends.get(fIndex)).fNickName,new ImageIcon("face/"+mainWin.faceOnline[Integer.parseInt(fFace)-1])});
else
dlm.addElement(new Object[]{((Friend)mainWin.myFriends.get(fIndex)).fNickName,new ImageIcon("face/"+mainWin.faceOffline[Integer.parseInt(fFace)-1])});
}
else
{
//若服务器端增加好友操作错误,则读取服务器返回信息
rtn=in.readLine();
}
}
catch(IOException e1)
{
rtn="加入好友时出错!";
}
finally
{
socket.close();
return rtn;
}
}
catch(Exception ee)
{
rtn="初始化网络套接字出错!";
}
finally
{
return rtn; //返回提示信息
}
}
}
//显示图像的下拉列表框的模型
class HeadPicCombobox extends DefaultComboBoxModel
{
//构造方法。将图像文件作为图标加载到列表中
public HeadPicCombobox(String[] pics){
for(int i=0;i<pics.length; ++i){
addElement(new Object[]{new ImageIcon("face/"+pics[i])});
}
}
//返回指定对象的图标
public Icon getIcon(Object object){
Object[] Array=(Object[])object;
return(Icon)array[0];
}
}
//显示图像的下拉列表框的绘制器
class HeadpicCellRenderer extends JLabel implements ListCellRenderer
{
//定义两种边框线
private Border
lineBorder=BorderFactory.createLineBorder(Color.red,2),
emptyBorder=BorderFactory.createEmptyBorder(2,2,2,2);
//构造方法
public HeadpicCellRenderer()
{
setOpaque(true); //使得标签的背景被绘制
}
//在绘制JList的每个Cell之前,都会调用getListCellRendererComponent(),得到一个Component,
//并将这个Component绘制在正确的位置。
//getListCellRendererComponent()给出如何绘制Component
public Component getListCellRendererComponent(JList List,
Object value,int index,boolean isSelected,boolean cellHasFocus)
{
HeadPicCombobox model=(HeadPicCombobox)list.getModel();
setIcon(model.getIcon(value));
if(isSelected){
setForeground(list.getSelectionForeground());
setBackground(list.getSelectionBackground());
}
else{
setForeground(list.getForeground());
setBackground(list.getBackground());
}
if(cellHasFocus)setBorder(lineBorder);
else setBorder(emptyBorder);
return this;
}
}
//以下继承DefaultListModel类以创建好友列表
class NameAndPicListModel extends DefaultListModel
{
public NameAndPicListModel(Vector myFriends,String[] pics)
{
for(int i=0;i<myFriends.size();++i)
{
addElement(new Object[]{((Friend)myFriends.get(i)).fNickName,new ImageIcon("face/"+pics[i])});
}
}
public String getName(Object object)
{
Object[] Array=(Object[]) object;
return(String) aray[0];
}
public Icon getIcon(Object object)
{
Object[] array=(Object[]) object;
return(Icon) aray[1];
}
}
class NameAndPicListCellRenderer extends JLabel implements ListCellRenderer
{
private Border lineBorder=BorderFactory.createLineBorder(Color.red,2),
emptyBorder=BorderFactory.createEmptyBorder(2,2,2,2);
public NameAndPicListCellRenderer()
{
setOpaque(true);
}
public Component getListCellRendererComponent(JList list,Object value,
int index,boolean isSelected,boolean cellHasFocus)
{
NameAndPicListModel model=(NameAndPicListModel)list.getModel();
setText(model.getName(value));
setIcon(model.getIcon(value));
if(isSelected)
{
setForeground(List.getSelectionForeground());
setBackground(List.getSelectionBackground());
}
else
{
setForeground(list.getForeground());
setBackground(list.getBackground());
}
if(cellHasFocus) setBorder(lineBorder);
else setBorder(emptyBorder);
return this;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -