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

时间:2016-01-08 16:15:56

标签: java swing background jtextpane

我有一个JTextPanepane.setEditable(false)迫使它有一个灰色的'背景颜色。

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

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

请注意,对于像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);

答案 1 :(得分:2)

实际上试试这个:

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

我认为它应该是TextPane.disabledBackground,如果没有尝试:TextPane.inactiveBackground

要改变背景颜色,我相信: 在窗格上尝试setDisabledTextColor

答案 2 :(得分:1)

我发现它是什么 - 这是因为我有pane.setOpaque(false),我无法在不首先删除它或将其更改为true的情况下更改背景颜色。

setBackground(Color.white)改变了这一点。