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; } }; }