好友列表的制作:
JPanel 是BorderLayout
分析好友面板:
North :
:“我的好友”、“陌生人”、“黑名单”采用卡片布局来实现。
点击:‘我的好友’显示 卡片1,
点击:“陌生人” 显示卡片2.
。。
。
Center:
中间是个:JScrollPane ,这个控件,
这个控件放了一个JPanel
(GridLayout(10,1))
好友的头像,是JLabel
South:
JPanel 布局是
GridLayout(2.1);
如何做到,一点陌生人按钮就让他显示第二张卡片 ???
这是难点。
同时,对于整个大的框架的布局也是一个大难点。
第一张卡片和第二张卡片它很多东西都是相似的。
如何为每一个卡片指定一个按钮,达到点击相应的按钮,可以显示相应的卡片???
总结:
首先这是一个卡片,有3个JPanel
这个最大的Panel 是一个BorderLayout
北部:
/*
好友列表:(也包括陌生人,黑名单)
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class QqFriendList extends JFrame implements ActionListener,MouseListener
{
// 处理第一张卡片:好友面板 jphy
JPanel jphy1,jphy2,jphy3;
// 第一张卡片当中的三个按钮
JButton jphy_jb1,jphy_jb2,jphy1_jb2;
JScrollPane jspl;
// 处理第二张卡片 (陌生人)
JPanel jpmsr1,jpmsr2,jpmsr3;
JButton jpmsr1_jb1,jpmsr2_jb2,jpmsr_jb3;
JScrollPane jsp2;
//把整个JFrame 设置成一个cardLayout
CarLayout cl;
public static void main(String[] args)
{
QqFriendList qq =new QqFriendList();
}
public QqFriendList()
{
jphy_jb1=new JButton("我的好友");
jphy_jb2=new JButton("陌生人");
jphy_jb3=new JButton("黑名单");
jphy1=new JPanel(new BorderLayout());
// 假定有50个好友 , GridLayout(50,1,4,4) 其中,4,4,是设置间距的。
jphy2=new JPanel(new GridLayout(50,1,4,4));
// 给jphy2,初始化50个好友
JLabel [] jbls =new JLabel[50];
for(int i=0;i<jbls.length;i++)
{
jbls[i]=new JLabel(i+1,new ImageIcon("image/mm.jpg"),JLabel.lEFT);
jphy2.add(jbls[i]);
}
jphy3=new JPanel(new GridLayout(2,1));
// 把俩个按钮加入到jphy3中。
jphy3.add(jphy_)jb2);
jphy3.add(jphy_jb3);
jspl=new JScrollPane(jphy2);
// 对jphy1初始化,即:整个的这一大块。
jphy1.add(jphy_jb1,"North");
jphy1.add(jspl,"Center");
jphy1.add(jphy3,"South");
// 处理第二张卡片
jpmsr_jb1=new JButton("我的好友");
jpmsr_jb1.addActionListener(this);
jpmsr_jb2=new JButton("陌生人");
// 为该按钮做个监听,以便于,每当点击“陌生人”按钮时,
// 都会触发 JFrame,从而显示第二张卡片。
jphy_jb2.addActionListener(this);
jpmsr_jb3=new JButton("黑名单");
jpmsr1=new JPanel(new BorderLayout());
// 假定有20个陌生人
jpmsr2=new JPanel(new GridLayout(20,1,4,4));
// 给jphy2,初始化20个陌生人
JLabel [] jbls2=new JLabel[20];
for(int i=0;i<jbls2.length;i++)
{
jbls2[i]=new JLabel(i+1+"",new ImageIcon("image/mm.jpg"),JLabel.lEFT);
//对标签进行监听,从而达到,当鼠标到达时,可以高亮显示
jbls[i].addMouseListener(this);
jpmsr2.add(jbls2[i]);
}
jpmsr3=new JPanel(new GridLayout(2,1));
//把俩个按钮加入到jphy3
jpmsr.add(jpmsr_jb1);
jpmsr.add(jpmsr_jb2);
jsp2=new JScrollPane(jpmsr2);
// 对jpmsr1,初始化
jpmsr1.add(jpmsr3,"North");
jpmsr1.add(jsp2,"Center");
jpmsr1.add(jpmsr_jb3,"South");
// 把整个的JFrame 做成卡片布局,
// 以便于可以容纳多个卡片
cl=new CarLayout();
this.setLayout(cl);
// 把第一张卡片放入JFrame中
this.add(jph1,"1");// 加载第一张卡片
// 在JFrame 中放置第二张卡片
this.add(jpmsr1,"2");//放置第二张卡片
this.add(jphy1,"Center");
this.setSize(140,400);
this.setVisible(true);
// 监听器
public void actionPerformed(ActionListener arg0)
{
// 如果用户点击的是陌生人按钮的话,就显示第二张卡片
if(arg0.getSource==jphy_jb2)
{
cl.show(this.getContentPane(),"2");// 为什么不能写出cl.show(this,"2");???
}
else if(arg0.getSource==jpmsr_jb1)
{
cl.show(this.getContentPane(),"1");//如何理解这句话??? 这句话的意思是什么??
// 如何理解这个cl 对象? 和这个对象的方法?
// 为什么cl对象,可以控制卡片的显示???
}
}
public void mouseClicked(MouseEvent arg0)
{
// 还有一件事,当我选中了一号小人的标签之后,双击可以进入与此人的聊天。
// 响应用户双击的事件,并得到好友的编号,拿到它的socket
if(arg0.getClickCout()==2)
{
//得到给好友的编号
String friendNo=((JLabel)arg0.getSource()).getText();
System.out.println("你希望"+friendNo+"谁聊天");
// 如何做到当双击谁时,能跳出与此人的聊天
}
}
public void mouseEntered(MouseEvent arg0)
{
JLabel jl=(JLabel)arg0.getSource();
jl.setforeground(Color.red);
}
public void mouseExited(MouseEvent arg0)
{
JLabel jl=(JLabel)arg0.getSource();
jl.setforeground(Color.black);
}
}
}
// 还有一件事,当我选中了一号小人的标签之后,双击可以进入与此人的聊天。
JPanel 是BorderLayout
分析好友面板:
North :
:“我的好友”、“陌生人”、“黑名单”采用卡片布局来实现。
点击:‘我的好友’显示 卡片1,
点击:“陌生人” 显示卡片2.
。。
。
Center:
中间是个:JScrollPane ,这个控件,
这个控件放了一个JPanel
(GridLayout(10,1))
好友的头像,是JLabel
South:
JPanel 布局是
GridLayout(2.1);
如何做到,一点陌生人按钮就让他显示第二张卡片 ???
这是难点。
同时,对于整个大的框架的布局也是一个大难点。
第一张卡片和第二张卡片它很多东西都是相似的。
如何为每一个卡片指定一个按钮,达到点击相应的按钮,可以显示相应的卡片???
总结:
首先这是一个卡片,有3个JPanel
这个最大的Panel 是一个BorderLayout
北部:
/*
好友列表:(也包括陌生人,黑名单)
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class QqFriendList extends JFrame implements ActionListener,MouseListener
{
// 处理第一张卡片:好友面板 jphy
JPanel jphy1,jphy2,jphy3;
// 第一张卡片当中的三个按钮
JButton jphy_jb1,jphy_jb2,jphy1_jb2;
JScrollPane jspl;
// 处理第二张卡片 (陌生人)
JPanel jpmsr1,jpmsr2,jpmsr3;
JButton jpmsr1_jb1,jpmsr2_jb2,jpmsr_jb3;
JScrollPane jsp2;
//把整个JFrame 设置成一个cardLayout
CarLayout cl;
public static void main(String[] args)
{
QqFriendList qq =new QqFriendList();
}
public QqFriendList()
{
jphy_jb1=new JButton("我的好友");
jphy_jb2=new JButton("陌生人");
jphy_jb3=new JButton("黑名单");
jphy1=new JPanel(new BorderLayout());
// 假定有50个好友 , GridLayout(50,1,4,4) 其中,4,4,是设置间距的。
jphy2=new JPanel(new GridLayout(50,1,4,4));
// 给jphy2,初始化50个好友
JLabel [] jbls =new JLabel[50];
for(int i=0;i<jbls.length;i++)
{
jbls[i]=new JLabel(i+1,new ImageIcon("image/mm.jpg"),JLabel.lEFT);
jphy2.add(jbls[i]);
}
jphy3=new JPanel(new GridLayout(2,1));
// 把俩个按钮加入到jphy3中。
jphy3.add(jphy_)jb2);
jphy3.add(jphy_jb3);
jspl=new JScrollPane(jphy2);
// 对jphy1初始化,即:整个的这一大块。
jphy1.add(jphy_jb1,"North");
jphy1.add(jspl,"Center");
jphy1.add(jphy3,"South");
// 处理第二张卡片
jpmsr_jb1=new JButton("我的好友");
jpmsr_jb1.addActionListener(this);
jpmsr_jb2=new JButton("陌生人");
// 为该按钮做个监听,以便于,每当点击“陌生人”按钮时,
// 都会触发 JFrame,从而显示第二张卡片。
jphy_jb2.addActionListener(this);
jpmsr_jb3=new JButton("黑名单");
jpmsr1=new JPanel(new BorderLayout());
// 假定有20个陌生人
jpmsr2=new JPanel(new GridLayout(20,1,4,4));
// 给jphy2,初始化20个陌生人
JLabel [] jbls2=new JLabel[20];
for(int i=0;i<jbls2.length;i++)
{
jbls2[i]=new JLabel(i+1+"",new ImageIcon("image/mm.jpg"),JLabel.lEFT);
//对标签进行监听,从而达到,当鼠标到达时,可以高亮显示
jbls[i].addMouseListener(this);
jpmsr2.add(jbls2[i]);
}
jpmsr3=new JPanel(new GridLayout(2,1));
//把俩个按钮加入到jphy3
jpmsr.add(jpmsr_jb1);
jpmsr.add(jpmsr_jb2);
jsp2=new JScrollPane(jpmsr2);
// 对jpmsr1,初始化
jpmsr1.add(jpmsr3,"North");
jpmsr1.add(jsp2,"Center");
jpmsr1.add(jpmsr_jb3,"South");
// 把整个的JFrame 做成卡片布局,
// 以便于可以容纳多个卡片
cl=new CarLayout();
this.setLayout(cl);
// 把第一张卡片放入JFrame中
this.add(jph1,"1");// 加载第一张卡片
// 在JFrame 中放置第二张卡片
this.add(jpmsr1,"2");//放置第二张卡片
this.add(jphy1,"Center");
this.setSize(140,400);
this.setVisible(true);
// 监听器
public void actionPerformed(ActionListener arg0)
{
// 如果用户点击的是陌生人按钮的话,就显示第二张卡片
if(arg0.getSource==jphy_jb2)
{
cl.show(this.getContentPane(),"2");// 为什么不能写出cl.show(this,"2");???
}
else if(arg0.getSource==jpmsr_jb1)
{
cl.show(this.getContentPane(),"1");//如何理解这句话??? 这句话的意思是什么??
// 如何理解这个cl 对象? 和这个对象的方法?
// 为什么cl对象,可以控制卡片的显示???
}
}
public void mouseClicked(MouseEvent arg0)
{
// 还有一件事,当我选中了一号小人的标签之后,双击可以进入与此人的聊天。
// 响应用户双击的事件,并得到好友的编号,拿到它的socket
if(arg0.getClickCout()==2)
{
//得到给好友的编号
String friendNo=((JLabel)arg0.getSource()).getText();
System.out.println("你希望"+friendNo+"谁聊天");
// 如何做到当双击谁时,能跳出与此人的聊天
}
}
public void mouseEntered(MouseEvent arg0)
{
JLabel jl=(JLabel)arg0.getSource();
jl.setforeground(Color.red);
}
public void mouseExited(MouseEvent arg0)
{
JLabel jl=(JLabel)arg0.getSource();
jl.setforeground(Color.black);
}
}
}
// 还有一件事,当我选中了一号小人的标签之后,双击可以进入与此人的聊天。