I want to create button with custome look and feel. I have got different images to be set as background of button for normal, mouse over, mouse click, button disabled etc. I have created my own class, extending javax.swing.JButton and overrides paintComponent method. How can i change my button background for all the above given states.
ImageIcon icon = new ImageIcon("images/icon.gif");
JButton button = new JButton(icon);
JButton has a series of simple set methods for rollover, pressed, selected, disabled and disabled selected states - for example
button.setPressedIcon(new ImageIcon("images/button-down.png")
the other methods are :
button.setRolloverIcon()
button.setSelectedIcon()
button.setRolloverSelectedIcon()
button.setDisabledIcon()
button.setDisabledSelectedIcon()
...have fun !
By the way, O'Reilly has a fun book called Swing Hacks with lots of little goodies for playing with swing : Swing Hacks
In addition to Steve De Caux's answer, you can:
- Add a
MouseListener
which changes anenum
variable, let's call itstate
on your extendedJButton
In your overridden
paintComponent
take into consideration the currentstate
and paint different backgrounds. Likeif (!getModel().isEnabled()) { } else if (state == ButtonState.MOUSE_OVER) { } else if (state == ButtonState.MOUSE_CLICKED) { }
You could create a custom button UI delegate. This blog entry: http://blog.elevenworks.com/?p=4 has an example for a custom tabbed pane, but the principle is the same. Extend BasicButtonUI, implement the custom rendering your want for the button, and then call setUI() on the button.
This will probably take longer to implement than using the existing button API methods to change the appearance, but it gives you a lot more control.