众所周知,Java的默认窗口使用的是系统默认样式,那么我们如何自己定义样式使其更好看呢?下面我就来分享一下如何自定义样式。

效果:

首先准备好我们的背景,按钮贴图:

然后开始。

先创建两个图片对象,把图片资源文件加进去。

ImageIcon background = new ImageIcon("res\\bg1.png"); // 创建一个名为background的图片对象,把背景图片加进去

ImageIcon buttonc=new ImageIcon("res\\close-r.png");// 创建一个名为buttonc的图片对象,把按钮贴图加进去

可以看到我们使用的是相对路径,及相对我们软件导出后的jar文件路径。而在eclipse ide中,工程文件夹的bin文件夹就可以等效为我们导出的jar文件。

然后需要把图片加到我们窗口背景里,如下:

JFrame jf=new JFrame();

jf.setSize(400,235);

Toolkit kit=Toolkit.getDefaultToolkit();

Dimension sc=kit.getScreenSize();

jf.setLocation((int)(sc.width/2.7f),sc.height/3);

jf.setUndecorated(true);//窗口去边框

JLabel bl=new JLabel(background); // 把上面的图片对象加到一个名为bl的标签里

bl.setBounds(0,0,jf.getWidth(),jf.getHeight()); //设置标签大小

JPanel imagePanel=(JPanel)jf.getContentPane(); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 ,使内容窗格透明后才能显示背景图片

imagePanel.setOpaque(false); // 把背景图片添加到分层窗格的最底层作为背景

jf.getLayeredPane().add(bl,new Integer(Integer.MIN_VALUE));

但发现我们的窗口无法拖动。现在就要加入一段代码实现拖动:

先在我们的类里面定义两个全局变量作为鼠标位置:

static int mouseAtX;

static int mouseAtY;

然后在主方法加入如下代码:

jf.addMouseListener(new MouseAdapter() { //设置窗口可拖动,添加监听器

public void mousePressed(MouseEvent e) { //获取点击鼠标时的坐标

mouseAtX=e.getPoint().x;

mouseAtY=e.getPoint().y;

}

});

jf.addMouseMotionListener(new MouseMotionAdapter() { //设置拖拽后,窗口的位置

public void mouseDragged(MouseEvent e) {

jf.setLocation(e.getXOnScreen()-mouseAtX,e.getYOnScreen()-mouseAtY);

}

});

窗口就做出来了。

现在添加组件,按钮为了好看需要去按钮边框和设置按钮背景透明,并加入贴图,如下:

JButton close=new JButton(buttonc);//实例化按钮对象并加入上面的贴图

close.setContentAreaFilled(false);//设置按钮背景透明

close.setBorderPainted(false);//去掉按钮边框

创建标签文本:

JLabel frtitle=new JLabel("窗口标题");

通常使用JPanel面板对象加入,规整并布局组件,再加入到窗口中,如下:

JPanel p=new JPanel();//实例化JPanel对象

p.setLayout(null);

p.add(frtitle);

p.add(close);

jf.getContentPane().add(p);

但是运行后我们失望地发现:

背景没了!

那是因为JPanel也有一个不透明的背景,加入到窗口后遮挡了背景,只需一行代码设置面板透明即可:

p.setOpaque(false); //面板设置为透明以显示背景

窗口就做完了!

完整代码:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

public class MainGUI{

static int mouseAtX;

static int mouseAtY;

public static void main(String[] args) throws Exception {

JFrame jf=new JFrame();

jf.setSize(400,235);

Toolkit kit=Toolkit.getDefaultToolkit();

Dimension sc=kit.getScreenSize();

jf.setLocation((int)(sc.width/2.7f),sc.height/3);

jf.setUndecorated(true);//窗口去边框

ImageIcon background=new ImageIcon("res\\bg1.png"); // 创建一个名为background的图片对象,把背景图片加进去

JLabel bl=new JLabel(background); // 把上面的图片对象加到一个名为bl的标签里

bl.setBounds(0,0,jf.getWidth(),jf.getHeight()); //设置标签大小

JPanel imagePanel=(JPanel)jf.getContentPane(); // 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 ,使内容窗格透明后才能显示背景图片

imagePanel.setOpaque(false); // 把背景图片添加到分层窗格的最底层作为背景

jf.getLayeredPane().add(bl,new Integer(Integer.MIN_VALUE));

jf.addMouseListener(new MouseAdapter() { //设置窗口可拖动

public void mousePressed(MouseEvent e) { //获取点击鼠标时的坐标

mouseAtX = e.getPoint().x;

mouseAtY= e.getPoint().y;

}

});

jf.addMouseMotionListener(new MouseMotionAdapter() { //设置拖拽后,窗口的位置

public void mouseDragged(MouseEvent e) {

jf.setLocation(e.getXOnScreen()-mouseAtX,e.getYOnScreen()-mouseAtY);

}

});

ImageIcon buttonc=new ImageIcon("res\\close-r.png");// 创建一个名为buttonc的图片对象,把按钮贴图加进去

JButton close=new JButton(buttonc);//实例化按钮对象并加入贴图

close.setContentAreaFilled(false);//设置按钮背景透明

close.setBorderPainted(false);//去掉按钮边框

close.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0);

}

});

close.setBounds(353, 2, 28, 28);

JLabel frtitle=new JLabel("窗口标题");

frtitle.setBounds(10, 5, 85, 27);

JPanel p=new JPanel();//实例化JPanel对象

p.setOpaque(false); //面板设置为透明以显示背景

p.setLayout(null);

p.add(frtitle);

p.add(close);

jf.getContentPane().add(p);

jf.show();

}

}

java自定义窗口_Java-创建一个自定义窗口,扁平化界面相关推荐

  1. python生成一个窗口_PyQt5创建一个新窗口的实例

    更多python教程请到友情连接: 菜鸟教程www.piaodoo.com 人人影视www.sfkyty.com 飞卢小说网www.591319.com 韩剧网www.op-kg.com 兴化论坛ww ...

  2. 怎么在java中创建一个自定义的collector

    文章目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream ...

  3. c++中的new_怎么在java中创建一个自定义的collector

    简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...

  4. java中collector使用_怎么在java中创建一个自定义的collector

    怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或 ...

  5. 利用c语言在屏幕上画出窗口,第一课:创建一个windows窗口

    跟我一起学图形编程                               作者:姚明联系方式: 欢迎使用我的图形学教程.我是计算机专业的学生,对图形图像技术有浓厚的兴趣,就读期间广泛的涉及相关知 ...

  6. OpenGL创建一个GLFW窗口的实例

    OpenGL创建一个GLFW窗口 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #include < ...

  7. SAP UI5 应用开发教程之三十二 - 如何创建一个自定义 SAP UI5 控件试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  8. python自动关闭弹窗_python – 每隔x分钟创建一个tkinter窗口,然后在y秒后自动关闭它...

    我正在尝试构建一个简单的程序来提醒我在使用计算机时休息一下.我对 python有一个合理的理解,但以前从未玩过GUI编程或线程,所以以下基本上是从stackoverflow复制/粘贴: import ...

  9. c#窗体程序生成错误_创建一个没有窗口的程序 (C#) | 学步园

    为了创建一个主窗口不显示的应用程序,我做了若干个探索.结果绕了几个弯,回到最简朴的没有窗体的世界中. 由此发现,我已经对窗体设计器产生了严重的依赖性,而且自已已经懒得不得了了--哪怕只有几行的代码,也 ...

  10. html中模块怎么创建,在Joomla中创建一个自定义HTML模块,不显示

    我有几个Joomla!我感到有信心的网站.我的Joomla!网站有一个artisteer模板. 我最近做了一个"戳出"的图片,突出了纸张的边缘,并展示了一个android" ...

最新文章

  1. 从大数据技术参考模型角度梳理大数据标准
  2. 安装和配置本地maven(三)
  3. [ CodeForces 865 D ] Buy Low Sell High
  4. Linux环境安装Kafka2.6.0
  5. 读书笔记_Effective_C++_条款三十一:将文件间的编译依存关系降至最低(第二部分)...
  6. POJ - 2528 Mayor's posters(线段数+离散化)
  7. android定位会出现的问题,android – 使用GPS_PROVIDER进行定位时出现问题
  8. 20155327实践二
  9. WinAPI——钩子函数大全
  10. [k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成
  11. TCP,UDP,IP数据包格式详解
  12. unity 脚本把变量放一起,在界面上显示,同时鼠标靠近时有注释出现,变量是滑动条有区间
  13. ext4文件系统制作 - make_ext4fs 参数介绍【转】
  14. Fruit (hdu 2152)
  15. 985本科,自学JAVA四个月,我用二年时间从银行外包跳进了阿里!
  16. ZABBIX3.04设置短信报警
  17. 听打测试打字速度软件,易捷听打练习测速助手
  18. 涉密计算机分区保护,VeraCrypt - 创建加密分区保护计算机上需要保密的文件
  19. Mac下关闭英文自动纠错
  20. 利用51单片机+HC-SR04+51单片机制造超声波测距模块

热门文章

  1. Spring Boot——开发新一代Spring应用
  2. linux 远程管理
  3. PHP语言基础简单整理
  4. SQLite 事务控制
  5. Android 自定义组合控件小结
  6. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》
  7. HDU3788 ZOJ问题【文本处理】
  8. 2018中国大学生程序设计竞赛-网络选拔赛题解
  9. UVA10152 ShellSort【匹配】
  10. UVA495 Fibonacci Freeze【大数+万进制】