Как установить цвет фона по умолчанию для JTextPane

Я уже обыскал всю сеть и попробовал несколько вещей, чтобы попытаться установить цвет фона по умолчанию для JTextPane, но он по-прежнему показывает белый цвет по умолчанию.

Я пытаюсь имитировать вывод на консоль, и мне нужно, чтобы весь фон был черным, даже если нет текста.

Похоже, что setCharacterAttributes() и setParagraphAttributes() работают только с любым вставленным текстом, но остальной фон по-прежнему белый.

Я кое-что видел, может быть, ошибка, связанная с настройкой цвета фона.

Как мне это сделать?

Это обычный текст, а не HTML.

Спасибо!

ОБНОВИТЬ:

Я наконец нашел то, что работало.

Использование setBackground (Color.BLACK) установило бы только фон под любым вставленным текстом, но остальная часть фона JTextPane по-прежнему оставалась белым по умолчанию на моем компьютере с Windows.

Я начал смотреть на изменение UIDefault, и все получилось! Вот что я использовал:

UIDefaults defs = UIManager.getDefaults();
defs.put("TextPane.background", new ColorUIResource(Color.BLACK));
defs.put("TextPane.inactiveBackground", new ColorUIResource(Color.BLACK));

И когда он запускается, без текста, вся JTextPane теперь становится черной, как я хочу, и любой вставленный текст - это то, что мне нужно.

Все остальное, что я пробовал, оставило остальную часть JTextPane белой, и я перепробовал множество различных «решений».

Спасибо за ответы.


person user1572522    schedule 17.10.2013    source источник
comment
У меня никогда не было проблем с использованием JDK4 / 5/6/7 в Windows 7. Разместите свой SSCCE, демонстрирующий проблему.   -  person camickr    schedule 17.10.2013
comment
Вы пробовали использовать setBackground?   -  person MadProgrammer    schedule 17.10.2013


Ответы (2)


Попробуйте этот SSCCE. Он демонстрирует установку цвета фона на JTextPane.

import java.awt.Component;
import java.awt.Container;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * http://stackoverflow.com/questions/19435181/how-to-set-default-background-color-for-jtextpane
 */
public class Q19435181 {
  public static void main(String... args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        JFrame frame = new JFrame("Example setting background color on JTextPane");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        Container pane = frame.getContentPane();
        pane.add(blackJTextPane());
        frame.setSize(800, 600);
        frame.setVisible(true);
      }

      private Component blackJTextPane() {
        JTextPane pane = new JTextPane();
        pane.setBackground(Color.BLACK);
        pane.setForeground(Color.WHITE);
        pane.setText("Here is example text");
        return pane;
      }
    });
  }
}
person axiopisty    schedule 17.10.2013

Вместо использования системных настроек по умолчанию это также можно сделать для конкретного элемента. Вот код, который я использую, в значительной степени основанный на ваших заметках:

        Color bgColor = Color.BLACK;
        UIDefaults defaults = new UIDefaults();
        defaults.put("TextPane.background", new ColorUIResource(bgColor));
        defaults.put("TextPane[Enabled].backgroundPainter", bgColor);
        out.putClientProperty("Nimbus.Overrides", defaults);
        out.putClientProperty("Nimbus.Overrides.InheritDefaults", true);
        out.setBackground(bgColor);

person Panayotis    schedule 26.06.2019