Displaying a Button with Varying Icons
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ChangingButtonIconTest {
static class TriangleIcon implements Icon {
String name;
static class State {
public static final int NORMAL = 0;
public static final int PRESSED = 1;
public static final int ROLLOVER = 2;
private State() {
}
}
int state;
Color color;
public TriangleIcon(Color c, int state) {
color = c;
this.state = state;
}
public int getIconWidth() {
return 20;
}
public int getIconHeight() {
return 20;
}
public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor(color);
Polygon p = new Polygon();
if (state == State.NORMAL) {
p.addPoint(x + (getIconWidth() / 2), y);
p.addPoint(x, y + getIconHeight() - 1);
p.addPoint(x + getIconWidth() - 1, y + getIconHeight() - 1);
} else if (state == State.PRESSED) {
p.addPoint(x, y);
p.addPoint(x + getIconWidth() - 1, y);
p.addPoint(x + (getIconWidth() / 2), y + getIconHeight() - 1);
} else {
p.addPoint(x, y);
p.addPoint(x, y + getIconHeight() - 1);
p.addPoint(x + getIconWidth() - 1, y + (getIconHeight() / 2));
}
g.fillPolygon(p);
}
}
public static void main(String args[]) {
JFrame frame = new JFrame();
Container contentPane = frame.getContentPane();
Icon normalIcon = new TriangleIcon(Color.red, TriangleIcon.State.NORMAL);
Icon pressedIcon = new TriangleIcon(Color.red,
TriangleIcon.State.PRESSED);
Icon rolloverIcon = new TriangleIcon(Color.red,
TriangleIcon.State.ROLLOVER);
JButton b = new JButton("Button", normalIcon);
b.setPressedIcon(pressedIcon);
b.setRolloverIcon(rolloverIcon);
b.setRolloverEnabled(true);
contentPane.add(b, BorderLayout.NORTH);
frame.setSize(300, 100);
frame.show();
}
}
Related examples in the same category