JFrame.setBackground() не работает - почему?

    JFrame mainFrame = new JFrame();
    mainFrame.setSize(100, 100);
    mainFrame.setBackground(Color.CYAN);
    mainFrame.setVisible(true);

Я намерен создать окно с голубым фоном. Что не так с этим? Мое окно не становится голубым, как я ожидал!

Кроме того, может ли кто-нибудь указать, почему у меня, кажется, есть все цвета в двух экземплярах (там есть Color.CYAN и Color.cyan). Есть ли разница между ними? Может быть, старший из них был константой до того, как на Java появились перечисления, а второй - из Enum?

Спасибо

Ответы

Ответ 1

Почему окна не голубые, как ожидалось?

Проблема в том, что область, где отображается содержимое JFrame, на самом деле является "областью содержимого", а не содержимым самого JFrame.

Следовательно, следующая строка:

mainFrame.setBackground(Color.CYAN);

Изменяет цвет JFrame, но на самом деле это не та часть, которая сразу же отображается, когда отображается JFrame.

Необходимо изменить цвет того, что называется "панель содержимого" (см. Как использовать корневые панели для рисунок), изменив приведенную выше строку следующим образом:

mainFrame.getContentPane().setBackground(Color.CYAN);

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

Есть ли разница между Color.CYAN и Color.CYAN?

Нет, между ними нет разницы - они оба являются константами в классе Color, которые являются Color самими объектами, Единственное различие заключается в именах констант.

Константы с именами нижнего регистра были введены, когда был введен класс Color (который, как представляется, JDK 1.0, поскольку в спецификации Java API для класса Color нет обозначения "Так как" ), а в верхнем регистре имена были добавлены позже в JDK 1.4.

Вероятно добавление прописных именованных констант было добавлено, чтобы константные имена в классе Color соответствовали Code Conventions для языка программирования Java, который в Раздел 9: Соглашения об именах утверждает, что константы должны быть во всех заглавных букв.

Ресурсы

Для получения дополнительной информации о том, как использовать Frames, следующие ресурсы из Учебники Java будут интересны:

Ответ 2

Это должно работать:

JFrame mainFrame = new JFrame();
mainFrame.setSize(100, 100);
mainFrame.getContentPane().setBackground(Color.CYAN);
mainFrame.setVisible(true);

Ответ 3

Вы хотите установить цвет панели содержимого JFrame.

Помимо названия нет различий между цветовыми константами верхнего и верблюдного цветов.