java仿qq好友列表_QQ好友列表树形列表java代码实现代码

以前在网上瞎转悠的时候就发现很多人为用Java实现QQ登陆后的面板的问题感到十分头疼,最近我因在写模拟QQ的项目,故不可或缺的遇到了这一个问题,在网上我google了,百度了,最终发现的是有很多人被这一问题困扰,却没有解决的方案,估计是那些写出来了的人,没有发布到网上来,如今,经过自己的多方面查找资料,终于把他写出来了,也不枉昨晚熬夜了,呵呵,好了先让我们来看看实现的效果截图:

f896c51d62ac98f637b4ece5a6009ac9.png

faeec7197f670ea7b10c004a1c7bf2cc.png

777f93f0605cebff9443ddfac0a03d0a.png

好了,效果就是这样了,虽然实现了基本功能,但是还是不完美,比如说好友面板不能随着窗口改变大小而改变,不过应该已经可以解决了,只是还没实践,下面就发上源代码:

一共有三个类:

MemberModel.java //显示类QQ似好友标签信息的模板类;

TestPane.java    //添加多个模板的容器类;

TestFrame.java   //窗体类;

核心部分是前面两个类,注意,第二个类的布局方式不能为空,否则不能是容器显示滚动条,这是实现这个面板功能的一个难题,因为我不怎么会使用其他的布局方式,就只经常用空布局,经过这次才知道,光用空布局是不行的,空布局的应用受到了太多的限制。

在TestPane.java中添加好友信息的方式应该是代码添加黑名单信息的方式,可在其他类中调用方法,传递参数(数组)过来,然后对信息模板进行初始化,还有面板上的信息模板从程序刚开始运行就生成了,只是设置了不可见,后点击相关分类标签后的可视与不可视是同理的,也就是说你有多少个好友就一直会有多少个JLabel存在你的面板上,只是你可能看不见他们,我感觉自己的实现方式不是很好。还有在我所用的这种布局方式中,显示Label的宽度是一定的,我不知道怎么设置他的宽度和高度,所以通过在Label上添加了一个白色图标(185 X 60)来使Label变宽,然后再添加模板JPanel,如果网友们还有好的解决方法,希望不吝赐教。

下面是源码:

package coolbaby6;

import javax.swing.ImageIcon;

import javax.swing.JPanel;

import javax.swing.JButton;

import java.awt.Color;

import java.awt.Rectangle;

import javax.swing.JLabel;

import java.awt.Dimension;

import java.awt.Font;

public class MemberModel{

private static final long serialVersionUID = 1L;

public JButton jButton = null;//显示好友头像;

public JPanel jPanel = new JPanel();//模板容器;

private JLabel lb_nickName = null;//显示昵称;

private int pic;

private String nickname = null;

private JLabel lb_mood = null;//显示心情;

public MemberModel(int pic, String nickname, int len) {

super();

this.pic = pic;//头像编(有多种方法可以实现,这种最简单)

this.nickname = nickname;//昵称;

initialize();

}

private void initialize() {

lb_mood = new JLabel();

lb_mood.setBounds(new Rectangle(51, 30, 131, 20));

lb_mood.setFont(new Font("Dialog", Font.PLAIN, 12));

lb_mood.setText("世界上最遥远的距离不是生与死,而是我站在你面前你却不知道我爱你!");

lb_mood.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseEntered(java.awt.event.MouseEvent e) {

exchangeEnter();

lb_mood.setToolTipText(lb_mood.getText());

}

public void mouseExited(java.awt.event.MouseEvent e) {

exchangeExited();

}

});

lb_nickName = new JLabel();

lb_nickName.setBounds(new Rectangle(52, 10, 80, 20));

lb_nickName.setFont(new Font("Dialog", Font.BOLD, 14));

lb_nickName.setText(nickname);

jPanel.setSize(new Dimension(185, 60));

jPanel.setLayout(null);

jPanel.add(getJButton(), null);

jPanel.add(lb_nickName, null);

jPanel.add(lb_mood, null);

jPanel.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseExited(java.awt.event.MouseEvent e) {

exchangeExited();//鼠标移出模板区,改变背景颜色;

}

public void mouseEntered(java.awt.event.MouseEvent e) {

exchangeEnter();//鼠标移进模板区,改变背景颜色;

}

});

}

private void exchangeEnter() {

jPanel.setBackground(new Color(192,224,248));

}

private void exchangeExited() {

jPanel.setBackground(null);

}

private JButton getJButton() {

if (jButton == null) {

jButton = new JButton();

jButton.setBounds(new Rectangle(8, 10, 40, 40));

jButton.setBackground(new Color(236, 255, 236));

jButton.setIcon(new ImageIcon(pic + ".jpg"));

jButton.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseExited(java.awt.event.MouseEvent e) {

exchangeExited();//鼠标移出模板区,改变背景颜色;

}

public void mouseEntered(java.awt.event.MouseEvent e) {

exchangeEnter();//鼠标移进模板区,改变背景颜色;

}

});

}

return jButton;

}

}

package coolbaby6;

import javax.swing.BorderFactory;

import javax.swing.JPanel;

import javax.swing.JLabel;

import javax.swing.BoxLayout;

import javax.swing.ImageIcon;

public class TestPane extends JPanel {

private static final long serialVersionUID = 1L;

private JLabel jLabel = null;

private JLabel jLabel1 = null;

private JLabel jLabel11 = null;

private JLabel jLabel12 = null;

private int clickF=0;

private int clickB=0;

public TestPane() {

super();

initialize();

}

private void initialize() {

jLabel12 = new JLabel();

jLabel12.setIcon(new ImageIcon("img/bg.jpg"));

jLabel12.add(new MemberModel(3,"CoolBabY3",200).jPanel);

jLabel12.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

jLabel11 = new JLabel();

jLabel11.setIcon(new ImageIcon("img/bg.jpg"));

jLabel11.add(new MemberModel(2,"CoolBabY2",200).jPanel);

jLabel11.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

jLabel1 = new JLabel();

jLabel1.setIcon(new ImageIcon("img/bg.jpg"));

jLabel1.add(new MemberModel(1,"CoolBabY1",200).jPanel);

jLabel1.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

jLabel = new JLabel();

jLabel.setText("我的好友");

jLabel.setIcon(new ImageIcon("img/ico.jpg"));

jLabel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

jLabel.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent e) {

clickF+=1;

if(clickF%2==1){

jLabel1.setVisible(false);

jLabel11.setVisible(false);

jLabel12.setVisible(false);

jLabel.setIcon(new ImageIcon("img/ico2.jpg"));

update();

}else{

jLabel1.setVisible(true);

jLabel11.setVisible(true);

jLabel12.setVisible(true);

jLabel.setIcon(new ImageIcon("img/ico.jpg"));

update();

}

}

});

this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

this.setSize(200, 408);

this.setLocation(20, 5);

this.add(jLabel, null);

this.add(jLabel1, null);

this.add(jLabel11, null);

this.add(jLabel12, null);

addJLabel();

}

private void update(){//更新UI界面;

this.updateUI();

}

private void clickBlack2(JLabel []jb){//点击标签,将后面的标签全部设为不可视;

for(int i=1;i

try{

jb[i].setVisible(false);

}catch(Exception e){

e.printStackTrace();

}

}

update();

}

private void clickBlack(JLabel []jb){//点击标签,将后面的标签全部设为可视;

for(int i=1;i

try{

jb[i].setVisible(true);

}catch(Exception e){

e.printStackTrace();

}

}

update();

}

private void addJLabel(){//添加黑名单的内容;

final JLabel []jb=new JLabel[7];

jb[0] = new JLabel();

jb[0].setText("黑名单");

jb[0].setIcon(new ImageIcon("img/ico2.jpg"));

jb[0].setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

jb[0].addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(java.awt.event.MouseEvent e) {

clickB+=1;

if(clickB%2==1){

clickBlack(jb);

jb[0].setIcon(new ImageIcon("img/ico.jpg"));

}else{

clickBlack2(jb);

jb[0].setIcon(new ImageIcon("img/ico2.jpg"));

}

}

});

this.add(jb[0],null);

for(int i=1;i

jb[i]=new JLabel();

jb[i].setIcon(new ImageIcon("img/bg.jpg"));

jb[i].setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

jb[i].add(new MemberModel((i+3),"CoolBabY"+(i+3),200).jPanel);

jb[i].setVisible(false);

this.add(jb[i],null);

}

}

}

package coolbaby6;

import java.awt.BorderLayout;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.ScrollPaneConstants;

import javax.swing.SwingUtilities;

public class TestFrame {

private JFrame jFrame = null;

private JPanel jContentPane = null;

private JScrollPane scrollPane=null;

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

TestFrame application = new TestFrame();

application.getJFrame().setVisible(true);

}

});

}

private JFrame getJFrame() {

if (jFrame == null) {

jFrame = new JFrame();

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jFrame.setSize(230, 700);

jFrame.setTitle("模拟实现QQ面板功能");

jFrame.setContentPane(getJContentPane());

}

return jFrame;

}

private JScrollPane getScrollPane(){//给添加好友的容器JPanel添加滚动条;

if(scrollPane==null){

scrollPane=new JScrollPane(new TestPane());

//scrollPane.setBounds(20,5, -1, 600);

scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );//不显示水平滚动条;

}

return scrollPane;

}

private JPanel getJContentPane() {//实例化底层的容器JPanel;

if (jContentPane == null) {

jContentPane = new JPanel();

jContentPane.setLayout(new BorderLayout());

jContentPane.add(getScrollPane(), BorderLayout.CENTER);

}

return jContentPane;

}

}

能成功编译成功我的源代码的方略:

①、建一个项目,按我的类名建3个类,将源代码拷贝进去;

②、在项目根目录下建一个名为img的文件夹,将要用到的图片放进去。(相关图片不再上传了,自己随便找几个图片测试即可)

③、编译实现;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值