获取FlatLaf主题值遇问题:@accentBase2Color返回null
解决FlatLaf主题颜色值获取返回null的问题
问题原因
FlatLaf里的@xxxColor属于主题变量标记,并非直接存入UIManager的键值对,直接调用UIManager.getColor()自然会返回null。这类标记是FlatLaf内部用于解析主题配置的特殊标识,需要用框架提供的专属API来解析。
解决方法
使用FlatLaf自带的FlatLaf.getColor()或UIUtil.getColor()方法获取解析后的颜色值,示例代码如下:
import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.util.UIUtil; import javax.swing.*; import java.awt.*; import java.awt.event.UnsupportedLookAndFeelException; public static void main(String[] args) throws UnsupportedLookAndFeelException { UIManager.setLookAndFeel(flatLaf); // 方法1:通过FlatLaf类直接获取 Color accentColor1 = FlatLaf.getColor("@accentBaseColor"); // 方法2:通过UIUtil工具类获取 Color accentColor2 = UIUtil.getColor("@accentBaseColor"); System.out.println(accentColor1); System.out.println(accentColor2); }
额外说明
如果需要获取主题中原始的颜色字符串(比如十六进制代码),可以先拿到变量值再转换为Color对象:
String colorHex = (String) FlatLaf.getGlobalDefaults().get("@accentBaseColor"); Color color = UIUtil.fromHexString(colorHex);
内容的提问来源于stack exchange,提问作者Baptiste Martin
相关产品推荐
相关产品推荐

