Как я могу изменить цвет фона нередактируемого JTextPane в Java?

У меня есть JTextPane, который имеет pane.setEditable(false), что заставляет его иметь «серый» цвет фона.

Попробовав setBackground(Color.WHITE) (что не работает), я попытался найти ответ в сети, но пока не нашел его.

Может ли кто-нибудь помочь мне в этом, пожалуйста?


person blueprintchris    schedule 08.01.2016    source источник
comment
Не могли бы вы опубликовать исполняемый пример, который мы можем скопировать и вставить и увидеть ту же проблему, что и вы?   -  person Frakcool    schedule 08.01.2016
comment
Я предлагаю проверить эту ссылку. Надеюсь, он ответит на ваш вопрос   -  person Jonah    schedule 08.01.2016
comment
@Frakcool спасибо, я начал писать Runnable Example и нашел при этом решение проблемы. У меня был pane.setOpaque(false), который мешал мне менять цвета на панели. Спасибо за помощь. Извините, я все еще много изучаю Java!   -  person blueprintchris    schedule 08.01.2016
comment
@ChrisMoran, поэтому, прежде чем задавать здесь вопрос, вы должны подготовить свой пример MCVE или Runnable, в большинстве случаев вы найдете решение при этом :)   -  person Frakcool    schedule 08.01.2016
comment
@Frakcool да, конечно, заметил. Спасибо за помощь. Иногда я бываю немного поспешным и нетерпеливым.   -  person blueprintchris    schedule 08.01.2016


Ответы (3)


Обратите внимание, что для некоторых Look and Feel like 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);
person Sharcoux    schedule 12.01.2016

На самом деле попробуйте это:

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

Я думаю, что это должно быть TextPane.disabledBackground, если не попробовать: TextPane.inactiveBackground

Чтобы изменить фоновый цвет текста, я считаю: попробуйте setDisabledTextColor на панели.

person SomeDude    schedule 08.01.2016
comment
Спасибо за вклад - однако проблема в том, что у меня было pane.setOpqaue(false), которое мешало мне изменить какой-либо цвет. - person blueprintchris; 08.01.2016

Я узнал, что это было - это было потому, что у меня был pane.setOpaque(false), я не мог изменить цвет фона, не удалив сначала это или не изменив его на true.

setBackground(Color.white) работало после изменения этого.

person blueprintchris    schedule 08.01.2016
comment
Цвет фона отличается от того, какой цвет указывает на неработоспособность компонента, я думал, что это то, что вы хотели изначально. - person SomeDude; 08.01.2016
comment
Я считаю, что setEnabled и setEditable это разные вещи. Я спрашивал о setEditable. Я буду помнить ваш ответ, если мне когда-нибудь понадобится изменить цвет компонентов с помощью setEnabled(false). Спасибо - person blueprintchris; 08.01.2016
comment
Хорошо понял. Не видел, чтобы вы использовали setEditable. - person SomeDude; 08.01.2016