【问题标题】:Java add button on button when mouseover鼠标悬停时Java在按钮上添加按钮
【发布时间】:2016-03-14 19:10:35
【问题描述】:

我想在鼠标悬停时将 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;

}

这个产品这个结果:

但是当我的鼠标悬停在“Interne”按钮上时,它会使按钮闪烁(出现和消失)。

【问题讨论】:

  • repaint 之前致电revalidate。如果这不起作用,请发布minimal reproducible example
  • 好吧,既然你的光标在Interne按钮上,它不再被认为是在Externe的可见区域。因此,您可能会立即收到mouseExited 事件。
  • @Reimeus 我已经按照你的建议编辑了我的代码

标签: java jbutton listener mouselistener


【解决方案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;
        }

    });

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2011-06-18
    • 2013-10-12
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多