java Swing QQ登陸界面

這幾天寫了一個QQ登錄界面,本來想做到高仿的,但是現在得做Kinect項目,無奈這個就得放一放了,但是現在這裏做個記錄

先說一下思想:

由JFrame和多個JPanel組成,

1.界面要重新修整,主要用setUndecorated(true);去除除窗體,然後加上拖動窗體的方法;

setAlwaysOnTop(true);方法讓界面懸浮

設置背景,通過判斷時間來選擇不同的圖片做背景

2.JPanel上要實現組件上不同圖片改變問題

在這裏用MouseListener實現,主要用到三個事件,mousePressed,mouseEntered,mouseExited,也就是在觸發這三個事件時

組件要通過setIcon方法轉換不同的圖片,所以每個組件都要準備三張(至少兩張)圖片,

下面用圖片對比一下:


這個是添加登錄界面


現在界面上還有沒解決的問題就是那兩個輸入框,也求大神指點

在這裏小說一下拖動窗體的方法  感覺這個比較重要(寫一個類說明):

package QQLoginUI;

import java.awt.Cursor;
import java.awt.Point;
import java.awt.event.*;

import javax.swing.*;

@SuppressWarnings("serial")
public class SetFrame extends JFrame{

	private Boolean isMove;
	private Point loc,now;
	
	public SetFrame(){
		setSetFrame();
	}
	public void setSetFrame(){
		this.setSize(380,290);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setLayout(null);
		this.setUndecorated(true);
		this.setAlwaysOnTop(true);
		setMoved();
		
		
		this.setVisible(true);
	}
	/*
	 * 拖動窗體方法
	 */
	private void setMoved(){
		SetFrame.this.addMouseListener(new MouseAdapter() {
			public void mouseReleased(MouseEvent e) {
				isMove = false;
				SetFrame.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
			}
			public void mousePressed(MouseEvent e) {
				loc = new Point(e.getX(), e.getY());//獲取窗體位置
				isMove = true;
				SetFrame.this.setCursor(new Cursor(Cursor.MOVE_CURSOR));
			}
		});
		SetFrame.this.addMouseMotionListener(new MouseAdapter() {
			public void mouseDragged(MouseEvent e) {
				if(isMove){
					now = new Point(SetFrame.this.getLocation().x+e.getX()
							-loc.x,SetFrame.this.getLocation().y+e.getY()
							-loc.y);
					SetFrame.this.setLocation(now);
				}
			}
		});
	}
	
	
	public static void main(String[] args) {
		new  SetFrame();
	}
}

這個類只需加上圖片和界面最小化、關閉事件就行了  比swing原來的界面漂亮!

源碼地址:源碼


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章