似乎是几个错误的干扰…
为了同时更改默认表背景和默认条带化,UIManager的预期配置(不仅是您的,也是我的)(对于所有遵循alternateRow属性的LAF都是相同的):
UIManager.put("Table.background", Color.RED);UIManager.put("Table.alternateRowColor", Color.PINK);
对metal和Nimbus均无效
- 金属色:无条纹,桌子全红色
- 在雨云中:条纹白色/粉红色,即表格背景被忽略
可以在DefaultTableCellRenderer中找到第一个的根本原因:
Color background = unselectedBackground != null ? unselectedBackground : table.getBackground();if (background == null || background instanceof javax.swing.plaf.UIResource) { Color alternateColor = DefaultLookup.getColor(this, ui, "Table.alternateRowColor"); if (alternateColor != null && row % 2 != 0) { background = alternateColor; }}
它的逻辑是歪曲的:仅当 表格 的背景是colorUIResource 时才采用替代颜色,这是一个相当微弱的区别。无论如何,它引导我们进行下一个尝试:
UIManager.put("Table.background", new ColorUIResource(Color.RED));UIManager.put("Table.alternateRowColor", Color.PINK);
对于金属来说,这看起来不错(除了复选框渲染器的典型问题,但这是另一个错误故事;-),对于Nimbus来说仍然没有运气。
下一步是查找可能相关的Nimbus默认值,并应用(在设置LAF之后!):
UIManager.getLookAndFeelDefaults().put("Table:"Table.cellRenderer".background", new ColorUIResource(Color.RED));
编辑 (按照评论的要求)
JXTable试图完全避开该问题-
它的剥离方法是从HighlighterFactory中检索到的Highlighter。需要通过从lookAndFeelDefaults中删除AlternativeRowColor属性并使用新的键“
UIColorHighlighter.stripingBackground”添加它来使Nimbus变得肮脏
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)