美文网首页
使用Java Swing实现QQ管家界面

使用Java Swing实现QQ管家界面

作者: 老九君 | 来源:发表于2019-08-16 11:40 被阅读0次

学会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

相关文章

  • 使用Java Swing实现QQ管家界面

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

  • Java自学-图形界面 组件

    Swing 中的组件列表 JAVA的图形界面下有两组控件,一组是awt,一组是swing。一般都是使用swing ...

  • java实现简单的日历小程序

    java实现简单的日历小程序 Java中改变应用程序界面外观(javax.swing.UIManager类和Loo...

  • pyqt4-初学

    【背景】打算用pyqt4实现界面化,但以前没用过python实现,玩过很老的Java swing,那么不是为了系统...

  • Eclipse+Java+Swing+Mysql实现自助存取款机

    一、系统介绍本系统采用Java Swing技术实现系统注册,登录,取款,存款,转账,查询余额功能,界面友好。工程截...

  • java中调用python

    运行流程:Java Swing 界面接收用户输入 --> Java 将用户输入写到本地文件中 --> Java 调...

  • 1.JFrame/JOptionPane

    Swing是在java的基础图形化用户界面AWT的基础上扩建的API集 Swing的功能:通过java代码编写窗口...

  • Java编程思想-图形化用户界面

    AWT与Swing java.awt需要调用本地系统方法实现,属于重量级控件,由于他调用本地系统方法,所以最终界面...

  • JMeter简介

    是一个具有图形界面,使用Swing图形API的JAVA桌面应用程序。 支持的协议 web:HTTP,HTTPS站点...

  • Java+swing版飞机大战

    Java小游戏实训——飞机大战 一、实验目的 使用Java+swing实现飞机大战小游戏 二、实验要求 1.掌握J...

网友评论

      本文标题:使用Java Swing实现QQ管家界面

      本文链接:https://www.haomeiwen.com/subject/fhefsctx.html