Изменить цвет фона JFrame

Создал JFrame и попытался изменить фон, но он не работает. Я просмотрел так много решений здесь и в Интернете, и они не работают. Что не так в моем коде?

 JFrame frame = new JFrame("Process");
       JLabel label = new JLabel("Please wait...");
       JProgressBar pb = new JProgressBar();
       pb.setIndeterminate(true);
       pb.setBackground(new java.awt.Color(248, 201, 171));

       frame.setBackground(new java.awt.Color(242, 186, 152));
       frame.setSize(400, 200);
       frame.setLocationRelativeTo(null);

       JPanel panel = new JPanel();
       panel.setBackground(new java.awt.Color(242, 186, 152));

       GridBagConstraints c = new GridBagConstraints();

       c.insets = new Insets(10,10,10,10); // make spaces between components on screen
       c.gridx = 0;
       c.gridy = 0;
       c.gridwidth = 20;
       panel.add(label, c);
       c.gridx = 1;
       c.gridy = 1;
       c.gridwidth = 20;

       panel.add(pb, c);
       frame.add(panel);
       frame.setVisible(true);

Пожалуйста, прочтите "Как создать минимальный воспроизводимый пример". Затем используйте ссылку редактировать, чтобы улучшить свой вопрос (не добавляйте дополнительную информацию через комментарии). В противном случае мы не сможем ответить на ваш вопрос и помочь вам. «Не работает» — это не рабочее описание проблемы. По крайней мере, опишите, как выглядит кадр (и как вы ожидаете, что он будет выглядеть). Здесь также может быть полезен (небольшой) скриншот.

GhostCat 01.03.2019 20:19

panel.setBackground(new java.awt.Color(242, 186, 152)) - это цвет вашего фона, вы используете его, и он отлично работает в моей среде IDE

Robert Cotterman 01.03.2019 20:42

Это может решить вашу проблему stackoverflow.com/questions/30269043/…

Robert Cotterman 01.03.2019 21:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
39
3

Ответы 3

попробуй frame.getContentPane().setBackground(new java.awt.Color(242, 186, 152));

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

Robert Cotterman 01.03.2019 20:59

не работайте с фреймом, работайте с frame.getContentPane(). Здесь также должны быть установлены ваша подпанель и макет. Кроме того, вы используете ограничения gridbag, но никогда не устанавливаете макет gridbag сначала. Тем временем вы добавляете во фрейм, и даже если вы добавили в панель содержимого, вы также не указали макет панели содержимого.

После внесения изменений в мой код я обнаружил, что проблема вызвана ограничениями GridBagConstraints c = new GridBagConstraints(); поэтому я изменил это, используя panel.setLayout(null); затем использовал setBounds для настройки положения компонентов label.setBounds(100, 30, 250, 10); и все в порядке

Другие вопросы по теме