?? 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 + -