Swing中使用UIManager批量自定义单一JComponent组件默认属性
最近在研究Swing,被它的复杂性气的快吐血了,刚才本打算把JFrame的背景色换成白底,结果发现事情没想象中那么顺利,调用setBackground完全没有效果,猛然醒悟到JPanel本身是带不透明底色的,事情一下子变得复杂起来了,因为即便最简单的窗口布局,也是嵌套了若干层JPanel、JSplitPane等容器的,一层遮盖一层,而要想统一改成白底的话,那得一个个改代码,或者用复杂的遍历算法...
百度上寻觅了一下,发现一个老去已久的帖子有提及到使用UIManager来批量更改默认值的,例如:
UIManager.put("Panel.background",new Color(250,250,250,0));
短短一行即改变了所有JPanel的background颜色为透明色,这样直接在frame上设置一下背景色就可以直接层层穿透上来了,实际运行效果也非常不错,不受实际设定的L&F影响,完美的自定义了组件属性。
* 后来发现这样改实在太暴力,有些组件的表现出现了超预期的UI崩坏,例如JFileChooser等..
除了背景色外,当然理应还有其他各种各样的属性可以通过这种方式来更改默认值,但是具体有哪些合法的属性参数,据说要翻源码和相关资料文档,对于想笔主这种懒人来说断然是不可接受的!
因此笔主用上了吃奶的智慧,终于找到作弊方法,通过下面一行代码把所有能改的参数全部列了出来:
System.out.println(Arrays.toString(UIManager.getDefaults().entrySet().toArray()));
但是结果很长很凌乱,超了控制台的最大显示高度,稍微整理一下:
Object[] list = (Object[]) UIManager.getDefaults().entrySet().toArray();
try {
FileWriter fw = new FileWriter(new File("c:/UIManagerDefaults.txt"));
BufferedWriter bw = new BufferedWriter(fw);
for(Object o:list){
bw.write(o.toString());
bw.newLine();
}
bw.flush();
bw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
输出来的文件:
AuditoryCues.noAuditoryCues=[Ljava.lang.Object;@bb494b
inactiveCaptionBorder=javax.swing.plaf.ColorUIResource[r=244,g=247,b=252]
ToolTip.background=com.sun.java.swing.plaf.windows.DesktopProperty@6a3960
Tree.focusInputMap=javax.swing.UIDefaults$LazyInputMap@13f136e
Label.disabledForeground=com.sun.java.swing.plaf.windows.DesktopProperty@44cbbe
ScrollBar.trackForeground=com.sun.java.swing.plaf.windows.DesktopProperty@12bf892
FileChooser.homeFolderIcon=com.sun.java.swing.plaf.windows.WindowsLookAndFeel$LazyWindowsIcon@f1916f
TextField.focusInputMap=javax.swing.UIDefaults$LazyInputMap@19762f
info=javax.swing.plaf.ColorUIResource[r=255,g=255,b=225]
RadioButton.interiorBackground=com.sun.java.swing.plaf.windows.DesktopProperty@141fab6
EditorPane.inactiveBackground=com.sun.java.swing.plaf.windows.DesktopProperty@141fab6
CheckBox.textIconGap=4
menuText=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]
TabbedPane.selectedTabPadInsets=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=1]
ComboBox.isEnterSelectablePopup=false
.....(内容太多,略)
使用的话就像这样:
UIManager.put("ComboBox.isEnterSelectablePopup", true);
Swing中使用UIManager批量自定义单一JComponent组件默认属性的更多相关文章
- 【Swing】理解Swing中的事件与线程
talk is cheap , show me the code. Swing中的事件 事件驱动 所有的GUI程序都是事件驱动的.Swing当然也是. GUI程序不同于Command Line程序,一 ...
- 转:swing 中paint与paintComponent的区别(jcomponent)
http://blog.csdn.net/q597756870/article/details/17854247 查API文档,查得在类Jcomponent下的paint方法有以下解释: ...
- MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.
mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...
- Swing杂记——Swing中引入Android的NinePatch技术,让Swing拥有Android的外观定制能力
[摘要] 本文诣在展示如何在Swing中引入 NinePatch技术(早期有文章里中文译作九格图,暂且这么叫吧^_^,但此术非传统移动手机上的功能布局——九格图哦). [准备篇] Q:何为 NineP ...
- Vue:如何在vue-cli中创建并引入自定义组件
一.创建并引入一个组件 1.创建组件 vue-cli中的所有组件都是存放在components文件夹下面的,所以在components文件夹下面创建一个名为First.vue的自定义组件: <t ...
- 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]
本系列文章导航 深入浅出Java多线程(1)-方法 join 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) 深入浅出多线程(3)-Future异步模式以及在JDK1.5Concu ...
- swing中的分层
swing中的分层 摘自:https://blog.csdn.net/levelmini/article/details/26692205 2014年05月23日 12:42:56 阅读数:1244 ...
- Android中使用ListView绘制自定义表格(2)
上回再写了<Android中使用ListView绘制自定义表格>后,很多人留言代码不全和没有数据样例.但因为项目原因,没法把源码全部贴上来.近两天,抽空简化了一下,做了一个例子. 效果图如 ...
- Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法
在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方 ...
随机推荐
- scala成长之路(5)问题记录
还是在看scala sdk源码的时候,有很多问题要考自己慢慢摸索,这里做个记录. 一. 隐式转换的作用域? 隐式转换需要三个因素 1. 己方(当前对象) 2. 转换函数 3. 对方(转换的目标类) 这 ...
- ruby File类
类方法 路径相关: File.basename(filename <, suffix>) -> string返回给定文件名 filename 的最后一部分.如果有 suffix 参数 ...
- Java学习笔记九:Java的循环跳转语句
Java的循环跳转语句 一:Java循环跳转语句之break: 生活中,我们经常会因为某些原因中断既定的任务安排.如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛.在 J ...
- 基于jQuery的2048小游戏设计(网页版)
上周模仿一个2048小游戏,总结一下自己在编写代码的时候遇到的一些坑. 游戏规则:省略,我想大部分人都玩过,不写了 源码地址:https://github.com/xinhua6/2048game.g ...
- python2中将Unicode编码的中文和str相互转换
在python2x版本中 关于中文汉字转换 1.中文------字符串格式 >>> s = '汉字' >>> type(s) <type 'str'> ...
- bzoj 一些题目汇总
2140: 稳定婚姻 /* 求联通分量. */ #include<bits/stdc++.h> using namespace std; typedef long long LL; inl ...
- Question | 关于Android安全的一二事
本文来自网易云社区 "Question"为网易云易盾的问答栏目,将会解答和呈现安全领域大家常见的问题和困惑.如果你有什么疑惑,也欢迎通过邮件(zhangyong02@corp.ne ...
- Delphi实例之橡皮筋画图的实现
Delphi实例之橡皮筋画图的实现 在<Delphi7基础教程>这本书的练习中提到过一个橡皮筋画图的例子,书上的源码是错误的!不知道是打印的错误还是本身源码就有问题,我将它改了过来. 在F ...
- ubuntu 把软件源修改为国内源
国内有很多Ubuntu的镜像源,比如:阿里源.网易源等,还有很多教育网的源,比如:清华源.中科大源等. 这里以清华源为例讲解如何修改Ubuntu 18.04里面默认的源. 修改步骤 第一步:备份原始源 ...
- HDFS伪分布式
(一).HDFS shell操作 以上已经介绍了如何搭建伪分布式的Hadoop,既然环境已经搭建起来了,那要怎么去操作呢?这就是本节将要介绍的内容: HDFS自带有一些shell命令,通过这些命令我们 ...