基本概念

在默认情况下,Swing程序使用Metal观感,可以采用两种方式改变观感。

第一种方式是在Java安装的子目录jre/lib下有一个文件swing.properties。在这个文件中,将属性swing.defaultlaf设置为所希望的观感类名。例如,

swing.defaultlaf=com.sun.java.swing.plaf.motif.MotifLookAndFeel

注意,Metal观感位于javax.swing包中。其他的观感包位于com.sun.java包中,并且不是在每个Java实现中都提供。现在,鉴于版权的原因,Windows和Mac的观感包只与Windows和Mac版本的Java运行时环境一起发布。

提示:由于属性文件中以#字符开始的行被忽略,所以,可以在swing.properties文件中提供几种观感选择,并通过增删#字符来切换选择

采用这种方式开启观感时必须重新启动程序。Swring程序只在启动时读取一次swing.properties文件。

第二种方式是动态地改变观感。这需要调用静态的UIManager.setLookAndFeel方法,并提供所想要的观感类名,然后再调用静态方法SwingUtilities.updateComponetTreeUI来刷新全部的组件集。这里需要向这个方法提供一个组件,并由此找到其他的所有组件。

当UIManager.setLookAndFeel方法没有找到所希望的观感或在加载过程中出现错误时,将会抛出异常。

为了列举安装的所有观感实现,可以调用

UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();

然后采用下列方法得到每一种观感的名字和类名

String name=infos[i].getName();
String ClassName=infos[i].getClassName();

源代码

import java.awt.*;
import javax.swing.*;/*** @version 1.32 2015-06-12* @author Cay Horstmann*/
public class PlafTest
{public static void main(String[] args){EventQueue.invokeLater(() -> {JFrame frame = new PlafFrame();frame.setTitle("PlafTest");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});}
}
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;/*** A frame with a button panel for changing look-and-feel*/
public class PlafFrame extends JFrame
{private JPanel buttonPanel;public PlafFrame(){buttonPanel = new JPanel();UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();for (UIManager.LookAndFeelInfo info : infos)makeButton(info.getName(), info.getClassName());add(buttonPanel);pack();}/*** Makes a button to change the pluggable look-and-feel.* @param name the button name* @param className the name of the look-and-feel class*/private void makeButton(String name, String className){// add button to panelJButton button = new JButton(name);buttonPanel.add(button);// set button actionbutton.addActionListener(event -> {// button action: switch to the new look-and-feeltry{UIManager.setLookAndFeel(className);SwingUtilities.updateComponentTreeUI(this);pack();}catch (Exception e){e.printStackTrace();}});}
}

运行结果

参考文章

https://blog.csdn.net/moonsilvering/article/details/6597458

https://blog.csdn.net/dandingyy/article/details/7427430

JAVA——改变观感相关推荐

  1. 基于AWT、Swing的GUI程序 - 改变观感

    本程序通用调用UIManager.getInstalledLookAndFeels()方法来获取本机已安装的所有观感,然后分别创建相应数量的Button,用来动态改变观感. 相关API : stati ...

  2. java改变变量编码方式_Java 10将如何改变您的编码方式

    java改变变量编码方式 突出显示Java 10中新的Java局部变量类型推断功能 早在2016年,Java社区就掀起了新的JDK增强提案(JEP): JEP 286 . 现在,两年后,局部变量类型推 ...

  3. java改变变量编码方式_Java 8中的5个功能将改变您的编码方式

    java改变变量编码方式 Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能. 尽管最初为该发行版设想的某些功能已扩展到第9版,或已推出第9版,但实际上有数十个新功能. 许多新添加的内容在编 ...

  4. java 改变文件权限_Java文件权限

    java 改变文件权限 Java File class contains methods to check file permissions for the application user. The ...

  5. JAVA改变图片大小,将图片改为Jpg格式

    JAVA改变图片大小,将图片改为Jpg格式 package util;import javax.imageio.ImageIO; import java.awt.*; import java.awt. ...

  6. Java改变图片的大小

    转自:http://blog.csdn.net/mainstream_code/article/details/7036302 [java] view plaincopyprint? <pre  ...

  7. java改变实参_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...

    是时候展现一下我的JAVA基础知识了,2333. 我按照执行顺序给你写注释好了. Person p1 = new Person(10); //创建了一个对象 //p1.age=10; modify(p ...

  8. java 改变图片某个坐标点的颜色,并返回给前台显示

    找了好久这个方法,最后终于被我我找到了,使用BufferedImage,很好用,这篇文章也包括我前两篇文章的内容(不断刷新页面),因为前面已经说过,这里面就不具体再讲了,上代码吧,为了让半路过来看的朋 ...

  9. java 改变窗口大小_java 如何让程序窗口随屏幕大小改变

    这个问题一直困扰我很长时间了,虽然工作了一段时间,但感觉连这个问题都解决不好的话,实在对不起自己.今天我终于抽出时间,好好网上找了下资料,然后写了个简单的记事本程序,感觉是我想要的结果.所以在这里把程 ...

最新文章

  1. buu [GXYCTF2019]CheckIn
  2. Nagios 安装及常见错误
  3. linux shell实现随机数多种方法(date,random,uuid)
  4. WampServer64的2.5版本配置多站点
  5. Spoj REPEATS 后缀自动机+set
  6. 浙江理工大学计算机考研试卷,2016年浙江理工大学计算机程序设计考研试题.pdf...
  7. if函数多个条件怎么用c语言,条件函数怎么用(if函数多个条件怎么用)
  8. dom4j解析xml
  9. 深入理解之border属性(第一期)
  10. wrapper.and的用法
  11. 使用HC05蓝牙模块实现数据无线传输,看完包会
  12. Mallox勒索病毒溯源注意
  13. mysql数据表分析统计记录
  14. 转:攻击JavaWeb应用[2]-CS交互安全
  15. Andriod-Dagger2
  16. 计算机组成原理与系统结构习题集
  17. < Linux >:Linux 进程概念 (1)
  18. vue-devtools在build时出错
  19. 滚动轴承振动序列的预处理--CWRU数据集
  20. 【小游戏】跑酷(带天赋)

热门文章

  1. Some thoughts on my own O/R Mapping or Code Generation tools
  2. 企业所得税汇算清缴系统服务器,【图解】汇算清缴风险控制本周五发布,操作流程这里全有!...
  3. java可变长字符串_具有可变长度的scala字符串插值
  4. lwip接收文件 stm32_接收数据
  5. 苹果11如何设置9宫格_4月9日三只可转债回落卖出条件单结果,10日永高转债上市,手把手教你如何设置华宝智投的涨跌幅条件单...
  6. 鸿蒙系统真实评测,鸿蒙系统和安卓的区别-华为鸿蒙系统使用体验评测
  7. Oracle的ha模式启停,数据库oracle 11g 的启停操作
  8. Docker安装mysql并连接
  9. keras从入门到放弃 (一) 线性回归
  10. 微信小程序获取用户手机号--官方示例