Java JTree忽略LaF覆盖
我最近一直在尝试将系统转换为统一的外观(在本例中为Nimbus)。但是,某些组件需要更改默认值,我不想因为一个组件而只更改默认值 我试图覆盖JTree组件的行高光颜色。我已经设法把它完全关掉了,但这不是我想要的 通过阅读这里的各种问题,我尝试使用:Java JTree忽略LaF覆盖,java,swing,nimbus,uimanager,uidefaults,Java,Swing,Nimbus,Uimanager,Uidefaults,我最近一直在尝试将系统转换为统一的外观(在本例中为Nimbus)。但是,某些组件需要更改默认值,我不想因为一个组件而只更改默认值 我试图覆盖JTree组件的行高光颜色。我已经设法把它完全关掉了,但这不是我想要的 通过阅读这里的各种问题,我尝试使用: UIDefaults overrides = new UIDefaults(); overrides.put("Tree.selectionBackground", new Color(200,200,200)); overrides.put("ni
UIDefaults overrides = new UIDefaults();
overrides.put("Tree.selectionBackground", new Color(200,200,200));
overrides.put("nimbusSelectionBackground", new Color(200,200,200));
modelTree = new ModelTree(treeModel);
modelTree.putClientProperty("Nimbus.Overrides", overrides);
modelTree.putClientProperty("Nimbus.Overrides.InheritDefaults",true);
其中modelTree扩展了标准JTree。没有这些重写,外观完全是默认的,我知道在derrive类中没有任何内容重写这些属性
问题在于属性被忽略,颜色保持与默认值相同,而InheritDefaults为true,行高亮显示在为false时关闭
我所追求的是一个简单的回忆的行突出
提前谢谢
编辑:
我希望这是一个可以接受的SSCCE(这是我第一次制作)。
应覆盖overiddenTree组件所选行上的默认文字颜色,但不覆盖
取消对覆盖默认值的行的注释以执行相同操作确实有效,但将为所有实例设置该行。查看
为了获得更好的帮助,请尽快发布SSCCE/MCVE,简短、可运行、可编译、Ahh ofc,谢谢。我对这一切都是新手,所以我会尽快创造一个完美的感谢!!这正是我需要的。我将不得不调查画家,因为我对他们不熟悉。
public static class treeTest extends JPanel {
public treeTest() {
super();
try {
UIManager.setLookAndFeel(NimbusLookAndFeel.class.getName());
} catch (Exception e) {
e.printStackTrace();
}
//UIManager.put("Tree.selectionForeground", Color.BLACK);
UIDefaults overrides = new UIDefaults();
overrides.put("Tree.selectionForeground", Color.BLACK);
JTree defaultsTree = new JTree();
JTree overiddenTree = new JTree();
overiddenTree.putClientProperty("Nimbus.Overrides", overrides);
overiddenTree.putClientProperty("Nimbus.Overrides.InheritDefaults", false);
add(defaultsTree);
add(overiddenTree);
}
}
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.plaf.nimbus.*;
public class TreeCellBackgroundPainterTest {
public JComponent makeUI() {
UIDefaults d = new UIDefaults();
AbstractRegionPainter rp = new AbstractRegionPainter() {
@Override protected void doPaint(
Graphics2D g, JComponent c, int width, int height, Object[] extendedCacheKeys) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, width, height);
}
@Override protected final PaintContext getPaintContext() {
return null;
}
};
d.put("Tree:TreeCell[Enabled+Selected].backgroundPainter", rp);
d.put("Tree:TreeCell[Focused+Selected].backgroundPainter", rp);
JTree tree = new JTree();
tree.putClientProperty("Nimbus.Overrides", d);
tree.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
JPanel p = new JPanel(new GridLayout(1, 2, 2, 2));
p.add(new JScrollPane(new JTree()));
p.add(new JScrollPane(tree));
return p;
}
public static void createAndShowGUI() {
try {
for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(laf.getName())) {
UIManager.setLookAndFeel(laf.getClassName());
}
}
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame f = new JFrame();
f.getContentPane().add(new TreeCellBackgroundPainterTest().makeUI());
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String... args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
}