Changing the background of JButton

前端 未结 3 2008
夕颜
夕颜 2021-01-14 18:36

I have a Swing JButton and I\'m also using the following code for my project:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

相关标签:
3条回答
  • 2021-01-14 18:51

    This depends on what you want to achieve.

    You could use JButton#setContentAreaFilled passing it false, but you, probably also need to call JButton#setBorderPainted passing it falls

    You could also change the UIManager's default value for the buttons background

    0 讨论(0)
  • 2021-01-14 19:09

    Take a look at bug 4880747 : XP L&F: REGRESSION: setBackground on JButton sets border color in Windows XP. Evaluation section states:

    Changing the appearance of a button can always cause conflicts with the current L&F implementation. The Windows L&F for Swing tries to be as close as possible to the native display. On XP, we use the built-in bitmap resources for the buttons. These can not be colorized, just like in the native API.

    You should call setContentAreaFilled(false) on the button to avoid having the L&F paint its decorations. This has the side effect that the button's opaque property is set to false, so you need to follow that call with a call to setOpaque(true).

    This is not a bug and will be closed.

    As stated, setContentAreaFilled(false) and setOpaque(true) will do the trick, but the button will look different.

    If it worth the trouble you can create you own ButtonUI. Here is a great example by @mKorbel that you may find useful.

    0 讨论(0)
  • 2021-01-14 19:11

    You should make the JButton opaque:

    btnNewButton.setOpaque(true);
    

    As specified for JComponent#setBackground method in oracle documentation:

    Sets the background color of this component. The background color is used only if the component is opaque, and only by subclasses of JComponent or ComponentUI implementations. Direct subclasses of JComponent must override paintComponent to honor this property.

    It is up to the look and feel to honor this property, some may choose to ignore it.

    I think that the current look and feel does not support this property..That's why the background color is ignored in this case.

    0 讨论(0)
提交回复
热议问题