自己写一个继承JButton的控件,自己设置鼠标进入的JButton边框

解决方案 »

  1.   

    以前我写过一个,还可以指定大小,文字/图标对齐位置等import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.border.Border;public class RolloverButton extends JButton{
      public static final int STANDARDSIZE = ImageIconBuilder.STANDARDSIZE;
      public static final int LARGESIZE = ImageIconBuilder.LARGESIZE;
      public static final int SMALLSIZE = ImageIconBuilder.SMALLSIZE;
      public static final int HUGE = ImageIconBuilder.HUGE;
      public static final char STYLE_H = 'h';
      public static final char STYLE_V = 'v';  ImageIconBuilder iconBuilder = ImageIconBuilder.getImageIconBuilder();  private String text = null;
      private int sizeFlag = STANDARDSIZE;
      private char styleFlag = STYLE_H;
      private String iconImage = null;  public RolloverButton(String iconImage) {
        this("", iconImage, STANDARDSIZE, STYLE_H);
      }  public RolloverButton(String iconImage, int sizeFlag) {
        this("", iconImage, sizeFlag, STYLE_H);
      }  public RolloverButton(String iconImage, int sizeFlag, char styleFlag) {
        this("", iconImage, sizeFlag, styleFlag);
      }  public RolloverButton(String text, String iconImage) {
        this(text, iconImage, STANDARDSIZE, STYLE_H);
      }  public RolloverButton(String text, String iconImage, char styleFlag) {
        this(text, iconImage, STANDARDSIZE, styleFlag);
      }  public RolloverButton(String text, String iconImage, int sizeFlag) {
        this(text, iconImage, sizeFlag, STYLE_H);
      }  public RolloverButton(String text, String iconImage, int sizeFlag, char styleFlag) {
        this.text = text;
        this.sizeFlag = sizeFlag;
        this.styleFlag = styleFlag;
        this.iconImage = iconImage;
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }  private void jbInit() throws Exception {
        this.setText(text);    if (styleFlag == STYLE_V) {
          this.setVerticalAlignment(SwingConstants.BOTTOM);
          this.setVerticalTextPosition(SwingConstants.BOTTOM);
          this.setHorizontalTextPosition(SwingConstants.CENTER);
        }    this.setIcon(iconBuilder.getIcon(iconImage, sizeFlag));
        this.setMargin(new Insets(2, 5, 2, 5));
        this.setContentAreaFilled(false);
        this.setBorderPainted(false);
        this.setFocusPainted(false);    this.addMouseListener(new java.awt.event.MouseAdapter() {
          public void mouseEntered(MouseEvent e) {
            this_mouseEntered(e);
          }
          public void mouseExited(MouseEvent e) {
            this_mouseExited(e);
          }
        });
      }  void this_mouseEntered(MouseEvent e) {
        if (this.isEnabled()) {
          this.setBorderPainted(true);
          this.setContentAreaFilled(true);
        } else {
          this.setBorderPainted(false);
          this.setContentAreaFilled(false);
        }
      }  void this_mouseExited(MouseEvent e) {
        this.setBorderPainted(false);
        this.setContentAreaFilled(false);
      }}ImageIconBuilder.getImageIconBuilder().getIcon()是我写的另一个工具类里的方法,返回一个指定大小的ImageIcon实例。
    另外,JToolBar有一个方法JToolBar.putClientProperty("JToolBar.isRollover", Boolean.TRUE),在metal风格下可以实现按钮呈现浮动效果