【问题标题】:Check whether the cursor of a mouse is over a component检查鼠标光标是否在组件上
【发布时间】:2016-03-26 00:44:00
【问题描述】:

我需要一个函数来检查鼠标的光标是否在一个组件上。组件将是JButtonJTextFieldJLabel。我试过下面的代码

@Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        boolean noDraw = false;

        if(this.getWidth() > mX && mX > 0){
            if( this.getHeight() > mY && mY > 0){
               components = this.getComponents();
               if( components != null){
                   for(int i = 0; i < components.length; ++i){
                      if( components[i].contains(mX, mY)){
                          noDraw = true;
                          break;
                      }
                   }
               }
               if(noDraw == false )
               {
                   Cicle.draw(g);
               }
            }
        }

    }

【问题讨论】:

  • 那么你有什么尝试?这不是代码编写服务。
  • @szym05 我的回答对你有用吗?
  • @Dan 感谢您的帮助。

标签: java button cursor components mouse


【解决方案1】:

Java 中有一个名为Mouse Listener 的函数,您可以使用它。您将它单独添加到组件中,然后当鼠标移到组件上时会出现MouseEvent。例如,如果您有一个名为 yourComponentJButton,您可以像这样将 Mouse Listener 添加到组件中。

yourComponent.addMouseListener(new CustomMouseListener());

class CustomMouseListener implements MouseListener
{
    @Override
    public void mouseClicked(MouseEvent e){}

    @Override
    public void mouseEntered(MouseEvent e)
    {
        //Mouse is over component
        Object source = e.getSource();
        if (source instanceof JButton) {
            System.out.println("Mouse is over a JButton");
        }

        if (source instanceof JTextField) {
            System.out.println("Mouse is over a JTextField");
        }

        if (source instanceof JLabel) {
            System.out.println("Mouse is over a JLabel");
        }

        Sysem.out.println("Mouse is over "+ e.getComponent().getClass().getName());
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
         //Mouse is not over component
         Sysem.out.println("Mouse is not over "+ e.getComponent().getClass().getName()+" anymore");
    }

    @Override
    public void mousePressed(MouseEvent e){}

    @Override
    public void mouseReleased(MouseEvent e){}
}

请参阅"How to write a Mouse Listener" 了解有关它们如何工作的更多信息

【讨论】:

  • mouseAdapter 会更合适。
  • @user1803551 没错
猜你喜欢
  • 2021-03-08
  • 1970-01-01
  • 2019-05-05
  • 2011-05-28
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
相关资源
最近更新 更多