您的位置:首页 > 编程语言 > Java开发

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

2015-08-10 16:53 701 查看
好友列表的制作:

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

}

}

}

// 还有一件事,当我选中了一号小人的标签之后,双击可以进入与此人的聊天。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: