2017-04-23 81 views
0

请帮助我解决问题。当lblCur输入lblBnt时,Mousemouse事件无法正常工作。它看起来像滞后的,差的FPS或类似的东西。在jLabel中使用mousemove事件创建自定义光标

如果我删除lblBtn.addMouseListener(...),lblBg.addMouseMotionListener(...)工作正常!但我不能让事件,当我在lblBnt点击...

代码:http://pastebin.com/ZBJySGEq

public myjFrame() 
    { 
     setCursor(Toolkit.getDefaultToolkit().createCustomCursor(new ImageIcon(UrlImg("cur_empty.png")).getImage(),new Point(0,0),"cursor_default")); 
     this.setLayout(new BorderLayout()); 
     lblBg= new JLabel(); 
     lblBg.setIcon(new ImageIcon(UrlImg("main_menu_bg.png"))); 
     lblBg.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { 
      public void mouseDragged(java.awt.event.MouseEvent evt) { 
       cMouseDragged(evt); 
      } 
      public void mouseMoved(java.awt.event.MouseEvent evt) { 
       cMouseMoved(evt); 
      } 
     }); 
     this.add(lblBg); 
    lblBg.setLayout(null);` 

     lblBtn= new JLabel(); 
     lblBtn.setIcon(new ImageIcon(UrlImg("choi.png"))); 
     lblBtn.setBounds(120, 310, 345, 132); 
     lblBtn.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       lblChoiMouseClicked(evt); 
      } 
      public void mouseEntered(java.awt.event.MouseEvent evt) { 
       lblChoiMouseEntered(evt); 
      } 
      public void mouseExited(java.awt.event.MouseEvent evt) { 
       lblChoiMouseExited(evt); 
      } 
     }); 
     lblBg.add(lblBtn); 
     lblCur= new JLabel(); 
     lblCur.setIcon(new ImageIcon(UrlImg("cur_def.png"))); 
     lblCur.setBounds(200, 200, 155, 155); 
     lblCur.setText(""); 
     lblBg.add(lblCur); 
    } 
    private void cMouseMoved(java.awt.event.MouseEvent evt) { 
     lblBg.add(lblBtn); 
     lblCur.setLocation(evt.getX()-40,evt.getY()-40); 
    } 
    private void cMouseDragged(java.awt.event.MouseEvent evt) { 
     lblCur.setLocation(evt.getX()-40,evt.getY()-40); 
    } 
    private void lblChoiMouseEntered(java.awt.event.MouseEvent evt) {          
     lblBtn.setIcon(new ImageIcon(UrlImg("choi_hover.png"))); 
    }          

    private void lblChoiMouseExited(java.awt.event.MouseEvent evt) {          
     lblBtn.setIcon(new ImageIcon(UrlImg("choi.png"))); 
    } 
    private void lblChoiMouseClicked(java.awt.event.MouseEvent evt) {          
     this.dispose(); 
    } 
    public static void main(String[] args) { 
     myjFrame main= new myjFrame(); 
     main.setBounds(100, 100, 769,892); 
     main.setVisible(true); 
    } 
} 

项目:https://drive.google.com/open?id=0Bw0by9qPYJ8TTWoydGtGbHZMbU0

提前感谢!

+0

你在哪里渲染?读完代码后,我找不到重绘() – user7185318

+0

在论坛中发布适当的[mcve]问题,而不是在外部网站上。 – camickr

+0

请在此处发布可疑代码,而不是其他链接 – HenryM

回答

0

在你MouseListener你可以使用:

event.getComponent().setCursor(); 

读入游标API的更多信息。您可以使用getPredefinedCursor()方法。

mousePressed()方法会设置光标。然后在mouseReleased()方法中,您将光标设置为空以恢复默认光标。

定义光标

光标定制= Toolkit.getDefaultToolkit()createCustomCursor(...)。 ,并提供用于光标的图像。

+0

感谢bro,但是如果我使用Cursor,则会使我的光标变为32x32。所以,我必须像使用lblCur.setLocation(evt.getX() - 40,evt.getY() - 40)一样使用lblCur; ' –