你可以在JLable或者任何从AbstractButton(包括JButton,JCheckBox, JradioButton,
以及几种JMenuItem)继承的组件中使用Icon。和JLabel一起使用Icon的做法非常直接
(后面有例子)。下面的例子还研究了与按钮(或者从按钮继承的组件)搭配使用图标的
所有方式。
你可以使用任何想用的gif文件,本例中使用的文件来自于本书的源代码包(可以从
www.BruceEckel.com下载)。要打开一个文件并且得到图形,只需创建一个ImageIcon
对象并且把文件名传递给它即可。然后,你就能在程序中使用得到的图标了。
//:c14:Faces.java
// Iconbehavior in Jbuttons.
// <appletcode=Faces width=400 height=100></applet>
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import com.bruceeckel.swing.*;
public class Faces extends JApplet {
private static Icon[] faces;
private JButton jb, jb2 = new JButton("Disable");
private boolean mad = false;
public void init() {
faces = new Icon[] {
new ImageIcon(getClass().getResource("Face0.gif")),
new ImageIcon(getClass().getResource("Face1.gif")),
new ImageIcon(getClass().getResource("Face2.gif")),
new ImageIcon(getClass().getResource("Face3.gif")),
new ImageIcon(getClass().getResource("Face4.gif")),
};
jb = new JButton("JButton", faces[3]);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(mad) {
jb.setIcon(faces[3]);
mad = false;
} else {
jb.setIcon(faces[0]);
mad = true;
}
jb.setVerticalAlignment(JButton.TOP);
jb.setHorizontalAlignment(JButton.LEFT);
}
});
jb.setRolloverEnabled(true);
jb.setRolloverIcon(faces[1]);
jb.setPressedIcon(faces[2]);
jb.setDisabledIcon(faces[4]);
jb.setToolTipText("Yow!");
cp.add(jb);
jb2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(jb.isEnabled()) {
jb.setEnabled(false);
jb2.setText("Enable");
} else {
jb.setEnabled(true);
jb2.setText("Disable");
}
}
});
cp.add(jb2);
}
public static void main(String[] args) {
Console.run(new Faces(), 400, 200);
}
} ///:~
许多Swing组件的构造器都接受Icon类型的参数,你也可以使用setIcon( )来加入或者改
变图标。本例还演示了如何让JButton(或者任何AbstractButton类型)在各种情况下显
示不同的图标:按下、禁止,或者“浮动”(鼠标移动到按钮上没有点击的时候)。这使
得按钮具有了相当不错的动画效果。