Почему setBackground to JButton не работает?

У меня есть следующий простой код:

btn = new JButton();
btn.setBackground(backgroundColor)

Я работал, когда использовал:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");

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

ДОБАВЛЕНО

Мне кажется, что нужно использовать getBackground. Но я не знаю как.


person Roman    schedule 14.02.2011    source источник
comment
Не относящееся к теме примечание: пожалуйста, не используйте эту строку UIManager таким образом: жесткое кодирование имени класса PLAF означает, что ваш код не будет выполняться, когда этот PLAF недоступен (например, на не-Windows JDK или на более новый Windows JDK, который может прекратить доставку этого конкретного класса). UIManager.getSystemLookAndFeelClassName() может быть тем, что ты после.   -  person Joachim Sauer    schedule 14.02.2011
comment
Можете ли вы опубликовать более подробную информацию? Ваш UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel); после или до команды btn.setBackground(backgroundColor)?   -  person Serhiy    schedule 14.02.2011
comment
@Serhiy, мой LookAndFeel был раньше. А пользоваться совсем не хочется.   -  person Roman    schedule 14.02.2011
comment
@proactif правильно. В этом связанном Как ответить[1] обсуждается несколько альтернативных подходов. [1]: stackoverflow.com/questions/3420431   -  person trashgod    schedule 14.02.2011


Ответы (5)


необходимо установить Opaque элемента в true для заливки цветом

     btn = new JButton();
     btn.setOpaque(true);
     btn.setBackground(backgroundColor);
person CoderCoder    schedule 18.07.2013

Из javadoc setBackground():

Это зависит от внешнего вида, чтобы уважать это свойство, некоторые могут игнорировать его.

Возможно, ваш LAF просто проигнорировал это.

person proactif    schedule 14.02.2011
comment
Хотя возможно, что он просто проигнорировал это, это крайне маловероятно. Сначала проверьте параметр setOpaque, так как это наиболее вероятная причина. - person Reid; 13.01.2015

добавить btn.setBorderPainted (ложь)

person JaNL    schedule 20.02.2017

Проблема также может быть связана с тем, как вы создаете кнопку. Проверьте код выше:

public class Test extends JApplet{

public void init() 
{  
    java.awt.EventQueue.invokeLater(new Runnable()
    {
        public void run() 
        {   
            setSize(200, 200);
            setLayout(null);

            JPanel p = new JPanel();
            getContentPane().add(p);
            p.setSize(getSize());
            p.setLayout(null);

            JButton b = new JButton("test");
            p.add(b);
            b.setBounds(10, 10, 100, 20);
            b.setBackground(Color.GREEN);

        }
    });
}

}

person Serhiy    schedule 14.02.2011

Просто нажмите один раз на кнопку, для которой вы хотите установить фон, а затем перейдите в окно свойств. Там второй вариант будет фоновым. Нажмите на многоточие, и вы сможете изменить цвет по своему вкусу. Цвет не будет отображаться на кнопке в вашем фрейме, пока вы не запустите программу. Вы можете видеть, что кнопка имеет цвет, который вы предпочитаете.

person Dora    schedule 27.06.2012