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

如何在Java中更改不可编辑的JTextPane的背景色?,java,swing,background,jtextpane,Java,Swing,Background,Jtextpane,我有一个JTextPane,它的haspane.setEditablefalse强制它有一个“灰显”的背景色 在尝试了setBackgroundColor.WHITE这个不起作用的方法后,我试着在网上寻找答案,但还没有找到答案 有人能帮我做这个吗?试试这个: UIManager.put("TextPane.disabledBackground", Color.WHITE); 我认为应该是TextPane.disabledBackground,如果不是,请尝试:TextPane.inactive

我有一个JTextPane,它的haspane.setEditablefalse强制它有一个“灰显”的背景色

在尝试了setBackgroundColor.WHITE这个不起作用的方法后,我试着在网上寻找答案,但还没有找到答案

有人能帮我做这个吗?

试试这个:

UIManager.put("TextPane.disabledBackground", Color.WHITE);
我认为应该是TextPane.disabledBackground,如果不是,请尝试:TextPane.inactiveBackground

要更改文字背景颜色,我相信: 在窗格上尝试。

实际尝试一下这个:

UIManager.put("TextPane.disabledBackground", Color.WHITE);
我认为应该是TextPane.disabledBackground,如果不是,请尝试:TextPane.inactiveBackground

要更改文字背景颜色,我相信:
试试窗格。

我发现了它是什么-这是因为我有pane.setOpaquefalse,我无法更改背景色,除非先删除它或将其更改为true


setBackgroundColor.white在修改后工作。

我发现了它是什么-这是因为我有pane.setOpaquefalse,如果不先删除它或将其更改为true,我无法更改背景色


setBackgroundColor.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);

请注意,对于一些不尊重背景属性的外观和感觉类似于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);

你可以发布一个我们可以复制粘贴并看到与你相同的问题吗?我建议查看链接。希望它能回答你的问题question@Frakcool谢谢,我开始编写一个可运行的示例,并在其中找到了问题的答案。我有pane.setOpaquefalse,这阻止了我更改窗格上的任何颜色。谢谢你的帮助。对不起,我还在学习很多关于Java的知识@ChrisMoran这就是为什么,在这里提问之前,你应该准备你的MCVE或Runnable示例,大多数时候你在这样做的时候找到了解决方案:@Frakcool yeah sure,注意到。谢谢你的帮助。我有时会有点匆忙和不耐烦。你能不能请你发一个帖子,我们可以复制粘贴并看到与你相同的问题?我建议查看链接。希望它能回答你的问题question@Frakcool谢谢,我开始编写一个可运行的示例,并在其中找到了问题的答案。我有pane.setOpaquefalse,这阻止了我更改窗格上的任何颜色。谢谢你的帮助。对不起,我还在学习很多关于Java的知识@ChrisMoran这就是为什么,在这里提问之前,你应该准备你的MCVE或Runnable示例,大多数时候你在这样做的时候找到了解决方案:@Frakcool yeah sure,注意到。谢谢你的帮助。我有时会有点匆忙和不耐烦。谢谢你的输入-但是问题是我有was窗格。setOpqauefalse阻止我更改任何颜色。谢谢你的输入-但是问题是我有was窗格。setOpqauefalse阻止我更改任何颜色。背景颜色与要更改的颜色不同表示组件不可用,我认为这是您最初想要的。我相信setEnabled和setEditable是两个不同的东西。我在打听塞特的情况。如果我需要使用setEnabledfalse更改组件的颜色,我会记住您的答案。谢谢你。没有看到您使用了setEditable。背景颜色与表示组件禁用的颜色不同,我认为这是您最初想要的。我相信setEnabled和setEditable是两个不同的东西。我在打听塞特的情况。如果我需要使用setEnabledfalse更改组件的颜色,我会记住您的答案。谢谢你。没有看到您使用了setEditable。