Как я могу изменить цвет фона jPanel, содержащего JRadioButtons?

У меня есть задание java, в котором мне нужно изменить цвет фона графического интерфейса в зависимости от выбранных пользователем переключателей, в которых перечислены разные цвета. В моей программе есть JFrame для хранения всего, а затем 3 JPanels (1 область инструкций, 1 сетка переключателей, 1 текстовое поле результата) в этом фрейме.

Мой прослушиватель действий в настоящее время устанавливает цвет фона с помощью этого оператора: getContentPane().setBackground(Color.decode(colorMap.get(btn.getName())));

Фон для JFrame и двух из трех панелей успешно меняется на правильный цвет, но панель, содержащая JRadioButtons, не изменится вообще!

Я попытался изменить параметр непрозрачности, я попытался установить цвет фона панели на (0,0,0,0), но пока ничего из этого не работает для меня. У кого-нибудь есть предложение о том, что я мог бы попробовать или прочитать дальше?

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

Спасибо!


person SirChill88    schedule 06.03.2015    source источник


Ответы (1)


Вы должны дополнительно установить все JRadioButtons.setOpaque(false).

Пример с одним непрозрачным JRadioButton и одним непрозрачным:

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;


public class XFrame
    extends JFrame
{
    public XFrame(String title)
    {
        super(title);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

        JRadioButton b1 = new JRadioButton("Non opaque button");
        // button must not be opaque
        b1.setOpaque(false);

        // this button is opaque and does not use the background color of the frame
        JRadioButton b2 = new JRadioButton("Opaque button");

        JPanel p1 = new JPanel();
        // panel must be non opaque also
        p1.setOpaque(false);

        p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));
        p1.add(b1);
        p1.add(b2);

        add(p1, BorderLayout.CENTER);

        getContentPane().setBackground(Color.red);

        setSize(200, 200);
    }

    public static void main(String[] args)
    {
        XFrame frame = new XFrame("Test");
        frame.setVisible(true);
    }

}
person Uli    schedule 06.03.2015
comment
Большое спасибо. Раньше я пробовал что-то подобное, но создал массив JRadioButton[] и изначально пытался сделать всю коллекцию непрозрачной. Я переместил .setOpaque(false) в цикл for, в котором я фактически создавал кнопки, и это решило проблему! Теперь мне нужно поиграть с цветовой схемой, потому что некоторые темные цвета скрывают текст. Еще раз спасибо! - person SirChill88; 06.03.2015