package com.vci.client.uif.engine.client.compare.dialog;
|
|
import java.awt.Color;
|
import java.awt.Component;
|
import java.awt.Dimension;
|
import java.awt.Graphics;
|
import java.awt.Insets;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseEvent;
|
import javax.swing.BorderFactory;
|
import javax.swing.Icon;
|
import javax.swing.JButton;
|
import javax.swing.border.BevelBorder;
|
import javax.swing.border.Border;
|
|
/**
|
* 无边框按钮
|
* 建议使用20x15大小的图片
|
* @author VCI-STGK006
|
*
|
*/
|
public class CompareDialogNoBorderButton extends JButton {
|
|
/**
|
* serialVersionUID
|
*/
|
private static final long serialVersionUID = 2467215220113221419L;
|
|
/**
|
* 判断按钮是否被选中
|
*/
|
private boolean click = false;
|
|
/**
|
* 是否可以被选择
|
*/
|
private boolean select = false;
|
|
/**
|
* Empty 边框
|
* 如果边框宽度为0,
|
* 导致在设置其它边框是按钮的大小发生变化
|
* 会出现按钮跳动的情况
|
*/
|
private Border border = BorderFactory.createEmptyBorder(2, 2, 2, 2);
|
|
/**
|
* bevel边框
|
*/
|
Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
|
|
private Border roverBorder = BorderFactory.createLineBorder(Color.BLACK);
|
|
/**
|
* 构造器
|
* @param icon 图片
|
*/
|
public CompareDialogNoBorderButton(Icon icon) {
|
this(icon, false);
|
}
|
|
/**
|
* 构造器
|
* @param icon
|
* @param select 是否可以被选择,
|
* 如果为true当点击后会有选中效果
|
*/
|
public CompareDialogNoBorderButton(Icon icon, boolean select) {
|
super(icon);
|
this.select = select;
|
setStyle();
|
}
|
|
/**
|
* 构造器
|
* @param text 文字
|
* @param icon 图片
|
*/
|
private CompareDialogNoBorderButton(String text, Icon icon) {
|
super(text, icon);
|
setStyle();
|
}
|
|
/**
|
* 设置按钮样式
|
*/
|
private void setStyle() {
|
this.setOpaque(false);
|
this.setBorder(border);
|
this.setContentAreaFilled(false);
|
this.setFocusPainted(false);
|
this.setRolloverEnabled(false);
|
|
if(this.getIcon() != null) {
|
setPreferredSize(new Dimension(
|
this.getIcon().getIconWidth() + 2,
|
this.getIcon().getIconHeight() + 2));
|
}
|
|
if(select) {
|
this.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent e) {
|
if(click) {
|
setClick(false);
|
} else {
|
setClick(true);
|
}
|
}
|
});
|
}
|
|
this.addMouseListener(new MouseAdapter() {
|
|
@Override
|
public void mouseEntered(MouseEvent e) {
|
if(!click && isEnabled()) {
|
setBorder(customBorder);
|
//setBorder(roverBorder);
|
}
|
}
|
|
@Override
|
public void mouseExited(MouseEvent e) {
|
if(!click) {
|
setBorder(border);
|
}
|
}
|
});
|
}
|
|
public boolean isClick() {
|
return click;
|
}
|
|
public void setClick(boolean click) {
|
this.click = click;
|
if(click) {
|
setBorder(bevelBorder);
|
} else {
|
setBorder(border);
|
}
|
}
|
|
/**
|
* 自定义边框
|
*/
|
private Border customBorder = new Border() {
|
|
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
|
g.setColor(Color.GRAY);
|
g.drawRect(x, y, width - 1, height - 1);
|
}
|
|
public Insets getBorderInsets(Component c) {
|
return new Insets(1, 1, 1, 1);
|
}
|
|
public boolean isBorderOpaque() {
|
return true;
|
}
|
};
|
}
|