接着上次的进度,上次写完了背景,
现在可以考虑标签和按钮了。
这个标签是位于背景上的某个位置的静态图像。
例1.3:一个图像标签类
package org.component; import javax.swing.ImageIcon; import javax.swing.JLabel; /** * * @author root */ public class ImageLabel extends JLabel { public ImageLabel(String img) { this(new ImageIcon(img)); System.out.print(img); } public ImageLabel(ImageIcon icon) { //得到的是图像的长和宽 setSize(icon.getImage().getWidth(null),icon.getImage().getHeight(null)); setIcon(icon); //设置图像 setIconTextGap(0); //设置文本间隙 setBorder(null); //设置边框和文本为null,这样可以消除图像周围的多余空间。 setText(null); setOpaque(false); //告诉标签不要绘制自己的背景。即可以变成透明的。 } }
写完上面的代码后就可以在ImageTest 的main 方法里加入下面这段代码:
ImageLabel2 label = new ImageLabel2(new ImageIcon(ImagePanelTest.class.getResource("/images/stop.png"))); label.setLocation(130, 40); panel.add(label);
测试一个效果:(这次换个背景,原来的背景太鲜艳了,这次换个淡点的。 )
注意红色的stop图表;
既然ImageLabel 效果有了,现在开始写ImageButton了
package org.component; import java.awt.Insets; import javax.swing.ImageIcon; import javax.swing.JButton; /** * * @author root */ public class ImageButton extends JButton { public ImageButton(String img) { this(new ImageIcon(img)); System.out.print(img); } public ImageButton(ImageIcon icon) { setSize(icon.getImage().getWidth(null),icon.getImage().getHeight(null)); setIcon(icon); setMargin(new Insets(0, 0, 0, 0)); //设置按钮边框和标签之间的空白 setIconTextGap(0); //设置文本间隙 setBorderPainted(false); //设置是否允许绘制边框 setBorder(null); setText(null); } }
为ImageButton 添加互动和其他状态,幸运的是,这项工作不需要自己编写,JButton 已经为表示滚动,按下,选中,失效和失效选中状态的图像提供了支持。可通过普通的set方法添加各种选中状态:
在ImageTest 的main 方法里加入
final ImageButton2 button = new ImageButton2(new ImageIcon(ImagePanelTest.class.getResource("/images/sure1.png"))); button.setLocation(180, 80); button.setPressedIcon(new ImageIcon(ImagePanelTest.class.getResource("/images/sure3.png"))); button.setRolloverIcon(new ImageIcon(ImagePanelTest.class.getResource("/images/sure-Rollover.png"))); button.setSelectedIcon(new ImageIcon(ImagePanelTest.class.getResource("/images/sure3.png"))); button.setRolloverSelectedIcon(new ImageIcon(ImagePanelTest.class.getResource("/images/sure-rolloverselected.png"))); button.setDisabledIcon(new ImageIcon(ImagePanelTest.class.getResource("/images/sure-disable.png"))); button.setDisabledSelectedIcon(new ImageIcon(ImagePanelTest.class.getResource("/images/sure-disable.png"))); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { button.setSelected(!button.isSelected()); System.out.println("selecting"); } }); panel.add(button);
看看效果图:
现在添加一个可以控制按钮是否可用的方法。我们可以借助JCheckBox 来实现
在ImageTest main 方法里添加以下代码:
final JCheckBox checkbox = new JCheckBox("Disable"); checkbox.setLocation(180,150); checkbox.setOpaque(false); checkbox.setSize(checkbox.getPreferredSize()); panel.add(checkbox); checkbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { button.setEnabled(!checkbox.isSelected()); } });
然后在进行测试 ,效果如下:
项目里的所需的图片文件都在附件里