Проблема с фоном JTextArea

private JDialog dialog;
private JTextArea text;
private JPanel buttons, filler;
private JRadioButton questions, list;
private ButtonGroup group;
private JButton confirm;

dialog = new JDialog(Main.masterWindow, lang.getString("newTitle"), true);
dialog.getContentPane().setLayout(new BoxLayout(dialog.getContentPane(), BoxLayout.Y_AXIS));
dialog.setResizable(false);

text = new JTextArea();

//this works
text.setBackground(Color.RED);

//this both don't
text.setBackground((Color)UIManager.get("control");
text.setBackground(dialog.getContentPane().getBackground());

dialog.setVisible(true);

Я использую Nimbus L&F, а «control» — это цвет фона моего диалога. Если я установлю любой другой цвет (красный в этом примере), он отобразится, но если я установлю его на этот, он останется белым.

У меня нет этой проблемы на стандартном (металлическом) L&F...

В чем проблема?


person Ivan Karlovic    schedule 15.09.2012    source источник


Ответы (2)


По какой-то причине ему не нравится объект ColorUIResource, который возвращается из вызова UIManager.get. Я не понимаю, почему, потому что это производное от Color.

Если вы сделаете что-то вроде

JDialog dialog = new JDialog((JFrame) null, "Help", true);
dialog.getContentPane().setLayout(new BoxLayout(dialog.getContentPane(), BoxLayout.Y_AXIS));

JTextArea text = new JTextArea(10, 10);

Color color = new Color(UIManager.getColor("control").getRGB()); // <-- Create a new color

text.setBackground(bg);

dialog.add(text);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);

Кажется, это работает.

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

person MadProgrammer    schedule 17.09.2012

Попробуйте запустить следующий код:

    System.out.println((Color)UIManager.get("control"));

Это распечатает, какой именно цвет вы получаете от UIManager. Возможно, он на самом деле должен быть белым. Скажи мне, что это печатает

РЕДАКТИРОВАТЬ:

//this both don't
//text.setBackground(dialog.getContentPane.getBackground());

Ну, во-первых, у вас нет () после getContentPane, хотя это метод. Попробуйте сделать это так: text.setBackground(dialog.getContentPane().getBackground());

person Alex Coleman    schedule 15.09.2012
comment
Хорошо, я исправил это, создав новый цвет с этими значениями RGB, но я не понимаю, почему я не могу получить цвет из фона диалога? В этом случае все в порядке, но фон моих диалогов может быть другим, и я хочу, чтобы JTextArea не отставала, если я не смогу напрямую получить доступ к цвету. - person Ivan Karlovic; 15.09.2012
comment
Нет, я только что сделал ошибку здесь, это вернет ошибку компиляции, если я сделаю это в Eclipse... - person Ivan Karlovic; 15.09.2012
comment
@Alex Coleman Nimbus по умолчанию и Как - person mKorbel; 16.09.2012