Simon wrote:
Dirk Bruere at NeoPax wrote:
I want to be able to change the icon of a button when it is pressed.
So, for example, I have a red button. I press it and it changes to a
green button. I have set the new icon in the button action code, but
cannot find a way to redraw it so that it changes instantly. What
method do I use?
repaint()?
However, what about just using
http://java.sun.com/javase/6/docs/api/javax/swing/AbstractButton.html#setPressedIcon(javax.swing.Icon)
Works for me:
package fubar;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ButtonIconTest {
public static void main(String[] args) throws Exception
{
SwingUtilities.invokeLater( new Runnable() {
public void run()
{
createAndShowGui();
}
} );
}
private static void createAndShowGui()
{
ImageIcon dog = null;
ImageIcon pig = null;
try
{
dog = new ImageIcon(
new
URL("http://java.sun.com/docs/books/tutorial/uiswing/" +
"examples/components/SplitPaneDemoProject/src/components/" +
"images/Dog.gif"));
pig = new ImageIcon(
new
URL("http://java.sun.com/docs/books/tutorial/uiswing/"
+
"examples/components/SplitPaneDemoProject/src/components/"
+ "images/Pig.gif"));
} catch (MalformedURLException ex)
{
Logger.getLogger(ButtonIconTest.class.getName()).log(Level.SEVERE,
"Error loading images:", ex);
return;
}
JFrame frame = new JFrame( "Example Images" );
JPanel panel = new JPanel();
panel.add( new JLabel( dog ) );
panel.add( new JLabel( pig ) );
JButton button = new JButton( dog );
button.setPressedIcon( pig );
panel.add( button );
frame.add( panel );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setVisible( true );
}
}
I already use pressed icon.