一个按钮,如下:
已经实现了,鼠标滑过变色,鼠标单击变色,如下:
如果在上面设置文本button.setText("ABCDEFGHIJKLMNOPQ"),如下:
那么问题来了
(1)设置很长的文本,button不会自动伸长
(2)文本覆盖了左边的图片
解决办法:将图片切成三块
重写paintComponent方法。但是问题如下:
button.setText("ABC");
button.setFont(new Font("SansSerif", Font.BOLD, 50));
,水平可以拉伸,竖直根据算法可以拉伸,但是由于水平切成三幅图,竖直拉伸时上下线条变粗了!
所以为了美观需要切成9格图片:
另外,重写paintComponent方法时,需要注意算法,一方面考虑到字体大小对图片的拉伸,还要考虑到setPreferredSize()等方法对其影响。
代码如下:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import twaver.TWaverUtil;
public class ImageButton9 extends JButton {
private static final long serialVersionUID = 1L;
protected boolean isEnable = true;
private Color color;
private Color txtBgColor = Color.BLACK;
private Color txtOverColor = Color.BLACK;
private Color txtDisColor = Color.GRAY;
private Color txtPressColor = Color.WHITE;
private Color txtSelColor = Color.WHITE;
private int txtW;
private int txtH;
private int txtDescent;
private String path;
private Map<String, ImageIcon> map = new HashMap<String, ImageIcon>();
public static final String ICON = "icon_";
public static final String BG = "bg_";
public static final String SEL = "sel_";
public static final String OVER = "over_";
public static final String PRESS = "press_";
public static final String DIS = "dis_";
public static final String LEFT