【问题标题】:How can I change the background color of an uneditable JTextPane in Java?如何更改 Java 中不可编辑的 JTextPane 的背景颜色?
【发布时间】:2017-05-04 00:39:13
【问题描述】:

我有一个JTextPane,它有pane.setEditable(false),这迫使它具有“灰色”背景色。

在尝试setBackground(Color.WHITE)(不起作用)之后,我尝试在网上四处寻找答案,但还没有找到答案。

谁能帮我解决这个问题?

【问题讨论】:

  • 你能发一个Runnable Example,我们可以复制粘贴看看和你一样的问题吗?
  • 我建议检查this 链接。希望它能回答你的问题
  • @Frakcool 谢谢,我开始写一个可运行的示例,并在这样做的过程中找到了问题的答案。我有pane.setOpaque(false),它阻止我更改窗格上的任何颜色。谢谢您的帮助。抱歉,我还在学习 Java!
  • @ChrisMoran 这就是为什么,在这里提出问题之前,您应该准备您的 MCVE 或 Runnable 示例,大多数情况下您会在这样做时找到解决方案 :)
  • @Frakcool 是的,当然,注意到了。感谢您的帮助。我有时会有点急躁和不耐烦

标签: java swing background jtextpane


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    其实试试这个:

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

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

    我相信要更改文本背景颜色: 在窗格中尝试setDisabledTextColor

    【讨论】:

    • 感谢您的输入 - 但问题是我遇到的是 pane.setOpqaue(false) 阻止我更改任何颜色。
    【解决方案3】:

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

    setBackground(Color.white) 修改后工作。

    【讨论】:

    • 背景颜色与表示组件禁用的颜色不同,我认为这就是您最初想要的。
    • 我相信setEnabledsetEditable 是两个不同的东西。我在询问setEditable。如果我需要使用setEnabled(false) 更改组件的颜色,我会记住您的答案。谢谢
    • 好的,知道了。没看到你用了 setEditable。
    猜你喜欢
    • 2012-05-02
    • 2010-12-11
    • 2018-12-27
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    相关资源
    最近更新 更多