我們可在一個JLable或從AbstractButton處繼承的任何事物中使用一個圖標(包括JButton,JCheckbox,JradioButton及不同類型的JMenuItem)。利用JLables的圖標十分的簡單容易(我們會在隨後的一個程序例子中看到)。下面的程序例子探索了我們可以利用按鈕的圖標和它們的衍生物的其它所有方法。
我們可以使用任何我們需要的GIF文件,但在這個例子中使用的這個GIF文件是這本書編碼發行的一部分,可以在www.BruceEckel.com處下載來使用。為了打開一個文件和隨之帶來的圖像,簡單地創建一個圖標並分配它文件名。從那時起,我們可以在程序中使用這個產生的圖標。
//: Faces.java // Icon behavior in JButtons package c13.swing; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Faces extends JPanel { static Icon[] faces = { new ImageIcon("face0.gif"), new ImageIcon("face1.gif"), new ImageIcon("face2.gif"), new ImageIcon("face3.gif"), new ImageIcon("face4.gif"), }; JButton jb = new JButton("JButton", faces[3]), jb2 = new JButton("Disable"); boolean mad = false; public Faces() { 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!"); 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"); } } }); add(jb2); } public static void main(String args[]) { Show.inFrame(new Faces(), 300, 200); } } ///:~
一個圖標可以在許多的構建器中使用,但我們可以使用setIcon()方法增加或更換圖標。這個例子同樣展示了當事件發生在JButton(或者一些AbstractButton)上時,為什麼它可以設置各種各樣的顯示圖標:當JButton被按下時,當它被失效時,或者“滾過”時(鼠標從它上面移動過但並不擊它)。我們會注意到那給了按鈕一種動畫的感覺。
注意工具提示條也同樣增加到按鈕中。