Java学习笔记-------好友列表的实现------卡片布局 实例

好友列表的制作:


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);

}


}
}




// 还有一件事,当我选中了一号小人的标签之后,双击可以进入与此人的聊天。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值