JButton在实现了鼠标停留在其上时有边框显示,而离开时的恢复没有边框显示功能后,如果添加了多个按钮则会发生明显的抖动现象,不象IE之类的按钮那样显示很平稳,请教高手该如何解决?

解决方案 »

  1.   

    button.addMouseListener(new MouseAdapter(){
          public void mouseEntered(MouseEvent e) {//进入button组件时
            button.setBorder(BorderFactory.createRaisedBevelBorder());
          }
          public void mouseExited(MouseEvent e) {//离开button组件时
            button.setBorder(BorderFactory.createEmptyBorder());
          }
             });
      

  2.   

    import java.awt.BorderLayout;import javax.swing.*;
    import javax.swing.border.Border;
    import javax.swing.border.CompoundBorder;
    import javax.swing.border.EmptyBorder;
    import javax.swing.plaf.basic.BasicBorders;public class T {
    public static void main(String[] args) {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    e.printStackTrace();
    }

    JToolBar toolbar = new JToolBar();
    toolbar.setRollover(true);
    toolbar.add(new JButton("Copy"));
    toolbar.add(new JButton("Cut"));
    toolbar.add(new JButton("Paste")); Border btnBorder = new CompoundBorder(
    new BasicBorders.RolloverButtonBorder(
    UIManager.getColor("controlShadow"),
    UIManager.getColor("controlDkShadow"),
    UIManager.getColor("controlHighlight"),
    UIManager.getColor("controlLtHighlight")),
    new EmptyBorder(3,3,3,3));

    JPanel p = new JPanel();
    JButton btn1 = new JButton("Copy");
    JButton btn2 = new JButton("Cut");
    JButton btn3 = new JButton("Paste");

    btn1.setRolloverEnabled(true);
    btn2.setRolloverEnabled(true);
    btn3.setRolloverEnabled(true);

    btn1.setBorder(btnBorder);
    btn2.setBorder(btnBorder);
    btn3.setBorder(btnBorder);
    p.add(btn1);
    p.add(btn2);
    p.add(btn3);

    JFrame f = new JFrame("Test");
    f.getContentPane().add(p, BorderLayout.CENTER);
    f.getContentPane().add(toolbar, BorderLayout.NORTH);
    f.setSize(300, 300);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }