使用Java Swing实现QQ管家界面

学会JavaSwing构建程序界面后,小伙伴们最大的困惑可能是“为什么我们做出来的界面那么丑、不跟市面流行的程序界面一样呢?”

像这个界面,我们发现标题栏跟默认状态不一样,关闭按钮的样式也变了。

实现的方法其实很简单,使用setUndecorated(true);取消窗体装饰,其他效果通过图片完成即可。

下面的代码实现了无标题栏窗体,使用背景拉伸的技术为处于上部分的面板设置了背景图片;实现了关闭按钮的鼠标经过以及鼠标单击事件;实现了鼠标拖拽新标题栏移动整个窗体的功能。

其他功能及特效大家可以自行实现。

Constants.java

/**

* @Description: 用来保存常量

* @author: 老九学堂·窖头 

* @date:  2017年12月25日 下午2:47:31 

* @version V1.0

* @Copyright: 2017 http://www.xuetang9.com Inc. All rights reserved.

*/publicclassConstants{/** 全局字体名称 */publicstaticString SysFontName="宋体";/** 登录窗体的宽 */publicstaticintWidth_LoginFrame=387;/** 登录窗体的高 */publicstaticintHeight_LoginFrame=266;}

LoginFrame.java

/**

* @Description: 登录界面

* @author: 老九学堂·窖头 

* @date:  2017年12月25日 下午2:40:07 

* @version V1.0

* @Copyright: 2017 http://www.xuetang9.com Inc. All rights reserved.

*/publicclassLoginFrameextendsJFrame{privateJPanel pnlTop=newTopPanel("images/sknin1.jpg");privateJPanel pnlMiddle=newJPanel();privateJPanel pnlBottom=newJPanel();privateJPanel contentPane=null;privateBorderLayout contentPaneLayout=null;//内容面板的边框布局privatePoint mousePressedPoint;//点击pnlTop面板时记录下的鼠标坐标publicLoginFrame(){setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//关闭窗体时什么也不做setTitle("登录电脑管家");//设置窗体标题setSize(Constants.Width_LoginFrame,Constants.Height_LoginFrame);//这里的窗体大小可以参考图片素材的大小(界面素材需复制到images文件夹下)initComponents();//调用自定义方法初始化窗体上的组件setLocationRelativeTo(null);//设置窗体居中setUndecorated(true);//设置窗体无装饰为真}privatevoidinitComponents(){contentPane=newJPanel();contentPaneLayout=newBorderLayout();contentPane.setLayout(contentPaneLayout);/**********************  start of 设置pnlTop相关控件  *************************/JLabel lblTitle=newJLabel("  登录电脑管家");lblTitle.setFont(newFont(Constants.SysFontName,Font.PLAIN,14));lblTitle.setForeground(Color.WHITE);//网格包布局GridBagLayout pnlTopLayout=newGridBagLayout();pnlTop.setLayout(pnlTopLayout);pnlTop.add(lblTitle);JLabel lblClose=newJLabel();lblClose.setIcon(newImageIcon("images/close.png"));pnlTop.add(lblClose);//设置网格包布局的规则GridBagConstraints grConstraints=newGridBagConstraints();grConstraints.insets=newInsets(0,0,0,245);//设置四方向边距    pnlTopLayout.setConstraints(lblTitle,grConstraints);//为控件设置新规则//越过布局设置控件的宽高pnlTop.setPreferredSize(newDimension(Constants.Width_LoginFrame,30));contentPane.add(pnlTop,BorderLayout.NORTH);lblClose.addMouseListener(newMouseAdapter(){//关闭按钮图片替换ImageIcon icon=newImageIcon("images/close.png");@OverridepublicvoidmouseEntered(MouseEvent e){lblClose.setIcon(null);lblClose.setForeground(Color.RED);lblClose.setText("X");//没有其他图片素材,使用X字母模拟实现切换效果lblClose.setPreferredSize(newDimension(icon.getIconWidth(),icon.getIconHeight()));}@OverridepublicvoidmouseExited(MouseEvent e){lblClose.setIcon(icon);}@OverridepublicvoidmouseClicked(MouseEvent e){intresult=JOptionPane.showConfirmDialog(null,"确认关闭吗?","窗口关闭",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);if(result==0)System.exit(0);}});pnlTop.addMouseListener(newMouseAdapter(){@OverridepublicvoidmousePressed(MouseEvent e){//鼠标点击时先记录鼠标的坐标mousePressedPoint=e.getPoint();}});pnlTop.addMouseMotionListener(newMouseAdapter(){@OverridepublicvoidmouseDragged(MouseEvent e){//获得窗体当前的坐标Point p=getLocation();//设置窗体坐标:当前坐标+鼠标移动后的当前坐标-鼠标原坐标  == 当前坐标+鼠标移动距离setLocation((int)(p.getX()+e.getX()-mousePressedPoint.getX()),(int)(p.getY()+e.getY()-mousePressedPoint.getY()));}});/**********************  end of 设置pnlTop相关控件  *************************/this.setContentPane(contentPane);}classTopPanelextendsJPanel{//重写上部面板(实现了背景图片拉伸效果)privateImageIcon background;publicTopPanel(String backImagePath){if(null==backImagePath)return;background=newImageIcon(backImagePath);}@OverrideprotectedvoidpaintComponent(Graphics g){//重绘组件if(background==null)return;//拉伸图片g.drawImage(background.getImage(),0,0,Constants.Width_LoginFrame,background.getIconHeight(),null);}}publicstaticvoidmain(String[]args){newLoginFrame().setVisible(true);}}

QQ电脑管家界面效果及素材下载


老九学堂出品,转载请私信哦

对于文章内容有不理解的可以添加老九君个人QQ:614940318,请备注来自简书

老九学堂免费C、C++、Java课程地址:

https://study.163.com/courses-search?keyword=%E8%80%81%E4%B9%9D%E5%AD%A6%E5%A0%82

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,528评论 0 11
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,367评论 0 17
  • Windows 常用消息大全 表A-1 Windows消息分布 消息范围说 明 0 ~ WM_USER – 1系统...
    北风知我意阅读 2,021评论 0 0
  • 一、CSS入门 1、css选择器 选择器的作用是“用于确定(选定)要进行样式设定的标签(元素)”。 有若干种形式的...
    宠辱不惊丶岁月静好阅读 1,589评论 0 6
  • 本节介绍各种常见的浏览器事件。 鼠标事件 鼠标事件指与鼠标相关的事件,主要有以下一些。 click 事件,dblc...
    许先生__阅读 2,424评论 0 4