如何更改 Java 中不可编辑的 JTextPane 的背景颜色?

How can I change the background color of an uneditable JTextPane in Java?

我有一个 JTextPane pane.setEditable(false) 强制它具有 'greyed-out' 背景颜色。

在尝试 setBackground(Color.WHITE)(无效)之后,我尝试在网上寻找答案,但还没有找到答案。

谁能帮我解决这个问题?

实际试试这个:

UIManager.put("TextPane.disabledBackground", Color.WHITE);

我觉得应该是TextPane.disabledBackground,不行就试试:TextPane.inactiveBackground

要更改文本背景颜色,我认为: 在窗格上尝试 setDisabledTextColor

我发现它是什么 - 那是因为我有 pane.setOpaque(false),如果不先删除它或将其更改为 true,我就无法更改背景颜色。

setBackground(Color.white) 修改后有效。

请注意,对于某些不考虑背景的类似 Nimbus 的外观和感觉 属性,您可以使用此代码:

private static class Painter extends javax.swing.plaf.nimbus.AbstractRegionPainter {
    private final Color color;

    private Painter(Color color) {
        this.color = color;
    }
    @Override
    protected AbstractRegionPainter.PaintContext getPaintContext() {
        return new AbstractRegionPainter.PaintContext(null, null, false);
    }

    @Override
    protected void doPaint(Graphics2D g, JComponent c, 
            int width, int height, Object[] extendedCacheKeys) {
        g.setColor(c.isEnabled() ? c.getBackground() : color);
        g.fillRect(0, 0, width, height);
    }
}

这为背景定义了一个新的自定义画家。对于 Nimbus,以这种方式将其应用到您的 JTextPane jtp

        UIDefaults defaults = UIManager.getLookAndFeelDefaults();
        Painter painter = new Painter(color);
        String key = "TextPane[Disabled].backgroundPainter";
        defaults.put(key, painter);
        jtp.putClientProperty("Nimbus.Overrides", defaults);
        jtp.putClientProperty("Nimbus.Overrides.InheritDefaults", false);