2016-03-14 187 views
0

我想添加JButton到另一个JButton鼠标悬停。这里是我的实际代码:当鼠标悬停在按钮上时,按钮添加按钮

public class JFrameButton extends JFrame 
{ 
public static void main(String[] args) 
    { 
    main(); 
    } 

public static void main() 
    { 
    new JFrameButton(); 
    } 

public JFrameButton() 
    { 
    boutonExterne = new JButton("Externe"); 
    boutonInterne = new JButton("Interne"); 

    boutonExterne.setLayout(new BorderLayout()); 
    setSize(200, 200); 
    setLocation(100, 100); 
    setVisible(true); 
    boutonExterne.addMouseListener(new MouseAdapter() 
     { 
     @Override 
     public void mouseExited(MouseEvent e) 
      { 
      boutonExterne.remove(boutonInterne); 
      JFrameButton.this.revalidate(); 
      JFrameButton.this.repaint(); 
      } 

     @Override 
     public void mouseEntered(MouseEvent e) 
      { 
      JFrameButton.this.boutonExterne.add(boutonInterne, BorderLayout.SOUTH); 
      JFrameButton.this.revalidate(); 
      JFrameButton.this.repaint(); 
      } 

     }); 
    this.add(boutonExterne); 
    } 
private JButton boutonExterne,boutonInterne; 

} 

本产品这样的结果:
JButton on Jbutton
但是,当我的鼠标在“上网。”按钮,使按钮闪光灯(出现和disapear)。

+1

呼叫'revalidate'之前'repaint'。如果这不起作用发布[MCVE] – Reimeus

+1

那么,因为你的光标在'Interne'按钮上,它不再被认为是在'Externe'的可见区域。所以你可能会得到一个即时的'mouseExited'事件。 – RealSkeptic

+0

@Reimeus我按照你的建议编辑了我的代码 – KingOfBabu

回答

1

没错。一旦从内部按钮的外部按钮的内容中移动鼠标,即调用内部按钮的mouseExit,使内部按钮隐藏起来。

一个快速的包看起来像:

boutonExterne.addMouseListener(new MouseAdapter() { 
     boolean ignoreExit=false; 

     @Override 
     public void mouseExited(final MouseEvent e) { 
      if (!ignoreExit) { 
       boutonExterne.remove(boutonInterne); 
       JFrameButton.this.revalidate(); 
       JFrameButton.this.repaint(); 
      } 
      ignoreExit=true; 
     } 

     @Override 
     public void mouseEntered(final MouseEvent e) { 
      JFrameButton.this.boutonExterne.add(boutonInterne, BorderLayout.SOUTH); 
      JFrameButton.this.revalidate(); 
      JFrameButton.this.repaint(); 
      ignoreExit=true; 
     } 

    });