Changing JButton icon when pressed
Hello all. I have a Java applet with pan and zoom features on a graph.
I am trying to get the zoom JButtons to change color (by applying a
different icon) as the user zooms in or out, indicating the level of
the zoom. But I can not get the icon to change, or perhaps the panel
to repaint. Here is a link to a small testcase:
http://bigcat.mc.vanderbilt.edu/BIGCAT/comparer/buttonTest.html
Here is my testcase applet code. I scaled the testcase down from the
full-fledged applet, so there may be some variables that are not used,
etc. I have been staring at this for two days, and I don't see the
problem.
import java.applet.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.geom.*;
import java.text.DecimalFormat;
import javax.swing.*;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
public class buttonTest extends Applet implements ActionListener {
JButton ZoomInButton, ZoomBar1Button, ZoomBar2Button, ZoomBar3Button,
ZoomOutButton;
Container cp;
GridBagLayout ZoomGrid;
GridBagConstraints z;
JPanel controls, zoom;
Border border, zoomborder;
TitledBorder title, zoomtitle;
Image ZoomInImage, ZoomBarImage, ZoomOutImage, ZoomInSelImage,
ZoomBarSelImage, ZoomOutSelImage;
ImageIcon ZoomIn, ZoomBar, ZoomOut, ZoomInSel, ZoomBarSel,
ZoomOutSel;
int buttonlevel;
int zoomlevel = 3;
int defaultzoomlevel = 3;
public void init() {
super.init();
this.setBackground(Color.white);
// Make a container to hold the graph and control panels
cp = new Container();
cp.setLayout(new FlowLayout());
add(cp);
// Create the zoom grid layout
ZoomGrid = new GridBagLayout();
z = new GridBagConstraints();
z.gridwidth = GridBagConstraints.REMAINDER;
z.ipady = -5;
// Get the custom button images for the zoom panel
ZoomInImage = this.getImage(this.getDocumentBase(),
"/BIGCAT/images/zoomin.gif");
ZoomBarImage = this.getImage(this.getDocumentBase(),
"/BIGCAT/images/zoombar.gif");
ZoomOutImage = this.getImage(this.getDocumentBase(),
"/BIGCAT/images/zoomout.gif");
ZoomInSelImage = this.getImage(this.getDocumentBase(),
"/BIGCAT/images/zoomin_selected.gif");
ZoomBarSelImage = this.getImage(this.getDocumentBase(),
"/BIGCAT/images/zoombar_selected.gif");
ZoomOutSelImage = this.getImage(this.getDocumentBase(),
"/BIGCAT/images/zoomout_selected.gif");
// Create the zoom control panel
zoom = new JPanel();
zoomborder = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
zoomtitle = BorderFactory.createTitledBorder(zoomborder, "Zoom");
zoomtitle.setTitleJustification(TitledBorder.RIGHT);
zoom.setBackground(Color.white);
zoom.setLayout(ZoomGrid);
zoom.setBorder(zoomtitle);
cp.add(zoom, BorderLayout.CENTER);
/* Create and add imageicon buttons to the control panel */
// makeZoomButton requires buttonName, buttonIcon, buttonImageIcon,
buttonCommand, selectedbutton, selectedIcon,
// selectedImageIcon, panelname, gridname, GridBagConstraints,
buttonLevel, currentzoomLevel
makeZoomButton(ZoomInButton, ZoomIn, ZoomInImage, "ZoomIn",
ZoomInSel, ZoomInSelImage, zoom, ZoomGrid, z, 1, zoomlevel);
makeZoomButton(ZoomBar1Button, ZoomBar, ZoomBarImage, "ZoomBar1",
ZoomBarSel, ZoomBarSelImage, zoom, ZoomGrid, z, 2, zoomlevel);
makeZoomButton(ZoomBar2Button, ZoomBar, ZoomBarImage, "ZoomBar2",
ZoomBarSel, ZoomBarSelImage, zoom, ZoomGrid, z, 3, zoomlevel);
makeZoomButton(ZoomBar3Button, ZoomBar, ZoomBarImage, "ZoomBar3",
ZoomBarSel, ZoomBarSelImage, zoom, ZoomGrid, z, 4, zoomlevel);
makeZoomButton(ZoomOutButton, ZoomOut, ZoomOutImage, "ZoomOut",
ZoomOutSel, ZoomOutSelImage, zoom, ZoomGrid, z, 5, zoomlevel);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Center")) {
zoomlevel = defaultzoomlevel;
}
else if (e.getActionCommand().equals("ZoomIn")) {
if (zoomlevel > 1) {
zoomlevel = zoomlevel - 1;
}
}
else if (e.getActionCommand().equals("ZoomOut")) {
if (zoomlevel < 5) {
zoomlevel = zoomlevel + 1;
}
}
zoom.repaint();
}
// This method creates the zoom imageicon button type
public void makeZoomButton (JButton buttonName, ImageIcon buttonIcon,
Image buttonImage, String buttonCommand,
ImageIcon selIcon, Image selImage, JPanel panelname, GridBagLayout
gridname, GridBagConstraints gc,
int blevel, int zlevel) {
if (blevel == zlevel) {
buttonIcon = new ImageIcon(selImage);
}
else {
buttonIcon = new ImageIcon(buttonImage);
}
selIcon = new ImageIcon(selImage);
buttonName = new JButton(buttonIcon);
buttonName.setOpaque(false);
buttonName.setContentAreaFilled(false);
buttonName.setBorderPainted(false);
buttonName.setBackground(Color.blue);
buttonName.setBackground(Color.blue);
buttonName.setPressedIcon(selIcon);
gridname.setConstraints(buttonName, gc);
buttonName.setActionCommand(buttonCommand);
buttonName.addActionListener(this);
zoom.add(buttonName);
}
}