这几天写了一个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(); } }
源码地址:源码