Почему окна не голубые, как ожидалось?
Проблема здесь в том, что область, в которой отображается содержимое 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
соответствовали Соглашениям о коде для языка программирования Java , которые в разделе 9: Соглашение об именах гласит, что константы должны быть написаны заглавными буквами.
Ресурсы
Для получения дополнительной информации о том, как использовать фреймы, могут быть интересны следующие ресурсы из Учебники по Java :
Как создавать фреймы - общие сведения о том, как сделать рамки.
Как использовать корневые панели - более конкретная информация о панелях, включая иллюстрацию того, как разные панели связаны друг с другом.
Это должно работать:
JFrame mainFrame = new JFrame();
mainFrame.setSize(100, 100);
mainFrame.getContentPane().setBackground(Color.CYAN);
mainFrame.setVisible(true);
Вы хотите задать цвет панели содержимого JFrame.
Кроме имени, нет никакой разницы между константами цвета в верхнем и верблюжьем регистре.