Java编写山寨QQ之好友界面

    由于是新手,水平有限,项目的开发是边学边做。

    参考的视频:

    

    但并不是完全照搬,里面也加了自己的一些想法。

    

    好友界面参照的依然是QQ6.3版本:

    

    

    我做出来的界面:

    

    有了前面的登陆界面的经验,现在写起好友界面来速度快多了,而且遇到的问题也少了许多。


    同样,本部分的编写又遇到了那些问题呢?

    Q1:我添加背景不想用piant方法,还有没有其他的方法?

    A:查资料如下:

JFrame设置背景图片

        JFrame是由这么几部分组成:最底下一层JRootPane,上面是glassPane(一个JPanel)layeredPane(一个JLayeredPane),而layeredPane又由contentPane(一JPanel)menuBar构成。

        我们一般在JFrame上添加组件往往都是加在contentPane上面:

 

         frame.getContentPane().add(btn);

 

         要在JFrame上添加背景图片,常见做法是加在layeredPane上面,并将contentPane设置成透明的即可。

    

    因以我这样来实现:

    1、定义属性。

	//背景
	ImageIcon background;
	JLabel imgLabel;
	JPanel buttom;
    2、初始化,调用构造背景的方法。

	//处理背景
	String bg = "Images/chatPanel.jpg";
	backGround(bg);
    3、backGround方法体。

        //处理背景方法
	public void backGround(String link)
	{
		background = new ImageIcon(link);
		imgLabel = new JLabel(background);
		imgLabel.setBounds(0, 0,  background.getIconWidth(), background.getIconHeight());
		buttom=(JPanel)this.getContentPane();
		//将contentPane设置为透明的
		buttom.setOpaque(false);
		this.getLayeredPane().add(imgLabel , new Integer(Integer.MIN_VALUE));
	}
    通过以上个部分就可以实现JFrame的背景设置。

    Q2:JScrollPane和JPanel用法

    本例中是在JScrollPane中放置JPanel,之前我一直搞反了。

    JPanel设置布局,JSP不需用布局。


代码:

package com.qq.client.view;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;

public class FriendView extends JFrame implements ActionListener,MouseListener{
	//背景图层
	ImageIcon background;
	JPanel buttom;
	JLabel imgLabel;
	JButton jb;
	
	//上层北边
	JLabel head,name,sign;
	
	//上层南边
	JPanel jp;//卡片布局
	CardLayout cl;
	
	//第一张卡片
	JPanel jp1;
	JButton jp1_jb1,jp1_jb2,jp1_jb3;
	
	//第二张卡片
	JPanel jp2;
	JScrollPane jsp;
	JPanel jp_jsp;//用来放jsp
	JButton jp2_jb1,jp2_jb2,jp2_jb3;
	
	//第三张卡片
	JPanel jp3;
	JScrollPane jsp2;
	JPanel jp_jsp2;//用来放jsp2
	JButton jp3_jb1,jp3_jb2,jp3_jb3;

	//第四张卡片
	JPanel jp4;
	JScrollPane jsp3;
	JPanel jp_jsp3;
	JButton jp4_jb1,jp4_jb2,jp4_jb3;

	
	//构造函数
	public FriendView()
	{
		//处理背景
		backGround();
		
		//处理北边的东西(头像,昵称,签名)
		head = new JLabel(new ImageIcon("Images/qqhead.jpg"));
		head.setBounds(10, 40, 50, 50);
		name = new JLabel("小Q机器人");
		name.setBounds(70, 42, 80, 20);
		name.setFont(new Font("宋体",Font.BOLD, 16));
		name.setForeground(Color.white);
		sign = new JLabel("个性签名");
		sign.setBounds(70, 70, 80, 20);
		sign.setForeground(Color.white);
		
		//设置好友列表为卡片布局
		cl = new CardLayout();
		jp = new JPanel();
		jp.setOpaque(false);
		jp.setBounds(0,	205, background.getIconWidth(), background.getIconHeight());
		
		//处理第一张卡片
		firstCard();	
		//处理第二张卡片
		secondCard();	
		//处理第三张卡片
		thirdCard();
		//处理第四张卡片
		fourthCard();
		
		this.add(head);
		this.add(name);
		this.add(sign);
		jp.setLayout(cl);
		jp.add(jp1,"1");
		jp.add(jp2,"2");
		jp.add(jp3,"3");
		jp.add(jp4,"4");
		this.add(jp);
		this.getLayeredPane().setLayout(null);
		this.setLayout(null);
		this.setSize(283, 720);
		this.setLocation(800, 30);
		this.setVisible(true);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
	}
	
	//处理背景方法
	public void backGround()
	{
		background = new ImageIcon("Images/bg.jpg");
		imgLabel = new JLabel(background);
		imgLabel.setBounds(0, 0,  background.getIconWidth(), background.getIconHeight());
		buttom=(JPanel)this.getContentPane();
		//将contentPane设置为透明的
		buttom.setOpaque(false);
		this.getLayeredPane().add(imgLabel , new Integer(Integer.MIN_VALUE));
	}
	
	//处理第一张卡片方法
	public void firstCard()
	{
		jp1 = new JPanel();
		
		jp1_jb1 = new JButton("> 我的好友");
		jp1_jb1.addActionListener(this);
		jp1_jb1.setLayout(null);
		jp1_jb1.setSize(277, 35);
		jp1_jb1.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp1_jb2 = new JButton("> 陌生人");
		jp1_jb2.addActionListener(this);
		jp1_jb2.setLayout(null);
		jp1_jb2.setBounds(0, 35, 277, 35);
		jp1_jb2.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp1_jb3 = new JButton("> 黑名单");
		jp1_jb3.addActionListener(this);
		jp1_jb3.setLayout(null);
		jp1_jb3.setBounds(0, 70, 277, 35);
		jp1_jb3.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp1.add(jp1_jb1);
		jp1.add(jp1_jb2);
		jp1.add(jp1_jb3);
		jp1.setLayout(null);
		jp1.setOpaque(false);
	}
	
	//处理第二张卡片方法
	public void secondCard()
	{
		jp2 = new JPanel();
		
		jp2_jb1 = new JButton("↓ 我的好友");
		jp2_jb1.addActionListener(this);
		jp2_jb1.setLayout(null);
		jp2_jb1.setSize(277, 35);
		jp2_jb1.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp2_jb2 = new JButton("> 陌生人");
		jp2_jb2.addActionListener(this);
		jp2_jb2.setLayout(null);
		jp2_jb2.setBounds(0, 354, 277, 35);
		jp2_jb2.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp2_jb3 = new JButton("> 黑名单");
		jp2_jb3.addActionListener(this);
		jp2_jb3.setLayout(null);
		jp2_jb3.setBounds(0, 389, 277, 35);
		jp2_jb3.setHorizontalAlignment(SwingConstants.LEFT );
		
		//假定30个好友
		jp_jsp = new JPanel(new GridLayout(30,1));
		jsp = new JScrollPane(jp_jsp);
		
		//初始化30个好友
		JLabel[] jbls = new JLabel[30];
		for(int i=0; i<jbls.length; i++)
		{
			jbls[i] = new JLabel(i+1+"号机器人", new ImageIcon("Images/qqhead.jpg"), JLabel.LEFT);
			jbls[i].addMouseListener(this);
			jp_jsp.add(jbls[i]);
		}

		jsp.setBounds(1, 35, 275, 319);
		
		//jsp.setLayout(null);错误!,jsp本来就没有布局
		jp2.add(jsp);
		jp2.add(jp2_jb1);
		jp2.add(jp2_jb2);
		jp2.add(jp2_jb3);
		jp2.setLayout(null);
		jp2.setOpaque(false);
	}
	
	//处理第三张卡片方法
	public void thirdCard()
	{
		jp3 = new JPanel();
		
		jp3_jb1 = new JButton("> 我的好友");
		jp3_jb1.addActionListener(this);
		jp3_jb1.setLayout(null);
		jp3_jb1.setSize(277, 35);
		jp3_jb1.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp3_jb2 = new JButton("↓ 陌生人");
		jp3_jb2.addActionListener(this);
		jp3_jb2.setLayout(null);
		jp3_jb2.setBounds(0, 35, 277, 35);
		jp3_jb2.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp3_jb3 = new JButton("> 黑名单");
		jp3_jb3.addActionListener(this);
		jp3_jb3.setLayout(null);
		jp3_jb3.setBounds(0, 389, 277, 35);
		jp3_jb3.setHorizontalAlignment(SwingConstants.LEFT );
		
		//假定30个好友
		jp_jsp2 = new JPanel(new GridLayout(10,1));
		jsp2 = new JScrollPane(jp_jsp2);
		
		//初始化30个好友
		JLabel[] jbls = new JLabel[10];
		for(int i=0; i<jbls.length; i++)
		{
			jbls[i] = new JLabel(i+1+"号陌生人", new ImageIcon("Images/qqhead.jpg"), JLabel.LEFT);
			jbls[i].addMouseListener(this);
			jp_jsp2.add(jbls[i]);
		}

		jsp2.setBounds(1, 70, 275, 319);
		
		jp3.add(jsp2);
		jp3.add(jp3_jb1);
		jp3.add(jp3_jb2);
		jp3.add(jp3_jb3);
		jp3.setLayout(null);
		jp3.setOpaque(false);
	}
	
	//处理第四张卡片方法
	public void fourthCard()
	{
		jp4 = new JPanel();
		
		jp4_jb1 = new JButton("> 我的好友");
		jp4_jb1.addActionListener(this);
		jp4_jb1.setLayout(null);
		jp4_jb1.setSize(277, 35);
		jp4_jb1.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp4_jb2 = new JButton("> 陌生人");
		jp4_jb2.addActionListener(this);
		jp4_jb2.setLayout(null);
		jp4_jb2.setBounds(0, 35, 277, 35);
		jp4_jb2.setHorizontalAlignment(SwingConstants.LEFT );
		
		jp4_jb3 = new JButton("↓ 黑名单");
		jp4_jb3.addActionListener(this);
		jp4_jb3.setLayout(null);
		jp4_jb3.setBounds(0, 70, 277, 35);
		jp4_jb3.setHorizontalAlignment(SwingConstants.LEFT );
		
		//假定30个好友
		jp_jsp3 = new JPanel(new GridLayout(10,1));
		jsp3 = new JScrollPane(jp_jsp3);
		
		//初始化30个好友
		JLabel[] jbls = new JLabel[5];
		for(int i=0; i<jbls.length; i++)
		{
			jbls[i] = new JLabel(i+1+"号黑名单", new ImageIcon("Images/qqhead.jpg"), JLabel.LEFT);
			jbls[i].addMouseListener(this);
			jp_jsp3.add(jbls[i]);
		}

		jsp3.setBounds(1, 105, 275, 319);
		
		jp4.add(jsp3);
		jp4.add(jp4_jb1);
		jp4.add(jp4_jb2);
		jp4.add(jp4_jb3);
		jp4.setLayout(null);
		jp4.setOpaque(false);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		//第一张卡片的按钮
		if(e.getSource()==jp1_jb1)
		{
			cl.show(jp, "2");;
		}
		if(e.getSource()==jp1_jb2)
		{
			cl.show(jp, "3");;
		}
		if(e.getSource()==jp1_jb3)
		{
			cl.show(jp, "4");;
		}
		
		//第二张卡片的按钮
		if(e.getSource()==jp2_jb1)
		{
			cl.show(jp, "1");;
		}
		if(e.getSource()==jp2_jb2)
		{
			cl.show(jp, "3");;
		}
		if(e.getSource()==jp2_jb3)
		{
			cl.show(jp, "4");;
		}
	
		//第三张卡片的按钮
		if(e.getSource()==jp3_jb1)
		{
			cl.show(jp, "2");;
		}
		if(e.getSource()==jp3_jb2)
		{
			cl.show(jp, "1");;
		}
		if(e.getSource()==jp3_jb3)
		{
			cl.show(jp, "4");;
		}
	
		//第四张卡片的按钮
		if(e.getSource()==jp4_jb1)
		{
			cl.show(jp, "2");;
		}
		if(e.getSource()==jp4_jb2)
		{
			cl.show(jp, "3");;
		}
		if(e.getSource()==jp4_jb3)
		{
			cl.show(jp, "1");;
		}
		
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		if(e.getClickCount()==2)
		{
			String str = ((JLabel)e.getSource()).getText();
			System.out.println("你希望和"+str+"聊天。");
		}
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		JLabel jl =(JLabel)e.getSource();
		jl.setForeground(Color.red);
			
	
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		JLabel jl =(JLabel)e.getSource();
		jl.setForeground(Color.black);
	}
	
}





猜你喜欢

转载自blog.csdn.net/l4642247/article/details/42265729