关键字: swinghacks,swing
接着上次的进度,上次写完了背景,
现在可以考虑标签和按钮了。
这个标签是位于背景上的某个位置的静态图像。
例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 ImageButton button = new ImageButton(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());
}
});
然后在进行测试 ,效果如下:
项目里的所需的图片文件都在附件里 点击这里下载