简介
- Customizing: 简单的介绍了自定义前的效果和自定义后的效果
- How to Customize: 介绍了自定义UI的三种方式
- Properties Files: 介绍了在配置文件中自定义UI ,可以使用的方式
- Compoents: 介绍了不同的组件可以自定义哪些UI属性
- Client Properties: 介绍了部分组件形状的改变, 和常见的UI属性.
如: 给你的JtextField 插入前置和后置按钮
System Properties: 介绍了框架在系统中可以显示的风格
如: 你可以让标题和菜单位于一行
为什么需要自定义
自定义button样式 在该链接的文章, 想实现纯色 / 边框型button的时候,
- 对基础的UI类扩展
- 掌握画布常用的方法
- 对基本的事件进行了解
当然上述还是需要掌握, 最拉跨的感觉就是实现一个功能代码有点多. 如果所有的组件都自定义一番,
那么你可以发布一个UI包了,
既然发现了FlatLaf, 那就把之前的代码全部重构了 ,开始实践!!!
实践1
文档是如此的漂亮,但是结合自身的需求,发现动手还是有那么卡顿一下, 因为文档是举一反三的,并没有更傻瓜式的测试代码, 比如在antd 上看到某段react样式,还能直接copy
1.配置文件
配置文件覆盖就比较简单了,建立自己的FlatLaf.properties, 填写需要覆盖的UI即可
2.存储配置
可以建立一个接口类, 存储所有的UI (可以少写 public static final) 看个人理解, 这个接口用途: 是全局使用颜色的选择器,那么修改配置文件的颜色,就可以修改页面了
3. 建立一个ButtonFactory 产出各种定制化的Button 按钮
4.FlatSVGIcon
同时发现了一个更感人的框架FlatSVGIcon, 再也不用为下载不同颜色的图标而发愁了, 而且可以通过代码控制图片的大小,颜色
那么你就可以实现各式各样的花式风格了
- 只控制style, 和写css风格差不多,但是style风格名称不是随便写的,需要详细看Compoents 介绍
button.putClientProperty(FlatClientProperties.STYLE, "focusedBackground: #263238;borderWidth:0;background: #08f; foreground: #fff;disabledBackground: #9e9e9e;disabledText:#fff;arc:10;");
- 控制形状, 比如圆形, 方形, 提示风格类型, 需要详细看Client Properties
button.putClientProperty(FlatClientProperties.BUTTON_TYPE, FlatClientProperties.BUTTON_TYPE_ROUND_RECT);
- 控制SVG的颜色, 我也只会最简单的filter控制 ,比如在开关面板上, 当按钮按下 和弹起的时候,使用不同的颜色图标
button.putClientProperty(FlatClientProperties.STYLE, style);
if (icon != null) {
icon.setColorFilter(new FlatSVGIcon.ColorFilter(c -> {
if (button.isSelected()) {
return CoreFlatLaf.ThemeColor.taskPaneSelect;
} else {
return CoreFlatLaf.ThemeColor.whiteColor;
}
}));
}
然后你就可以进阶修改自己的菜单风格
— 建议动手之前, 一定要去阅读BasicTaskPaneUI 的源码,然后再去实现