Java 通过MouseMove事件更改光标不';行不通

Java 通过MouseMove事件更改光标不';行不通,java,swing,user-interface,awt,mouse,Java,Swing,User Interface,Awt,Mouse,我的鼠标光标有点问题。我用这个.setCursor()在JPanel的MouseMotion事件中设置了它,但它没有改变。 在离开窗口(例如在我的桌面上)并返回窗口后,光标将因任何运动而改变 JPanel鼠标事件的代码如下: public void mouseMoved(MouseEvent e) { this.requestFocusInWindow(); this.requestFocus(); this.cL.doMouseMoved(e); } doMous

我的鼠标光标有点问题。我用这个.setCursor()在JPanel的MouseMotion事件中设置了它,但它没有改变。 在离开窗口(例如在我的桌面上)并返回窗口后,光标将因任何运动而改变

JPanel鼠标事件的代码如下:

public void mouseMoved(MouseEvent e) {
    this.requestFocusInWindow();
    this.requestFocus();


    this.cL.doMouseMoved(e);
}
doMouseMoved方法的代码如下:

public void doMouseMoved(MouseEvent e) {
    this.lastMouseEvent = e;
    this.sList.setCurrentElements(e.getPoint());
    this.setMovedCursor(e);

}
最后,这是setMovedCursor方法的代码:

public void setMovedCursor(MouseEvent e) {
 java.awt.Cursor cu = new java.awt.Cursor(java.awt.Cursor.SW_RESIZE_CURSOR);
 view.setCursor(cu);
}
(我知道这不是最好的方式)

我希望每个人都能帮助我。 对不起,有任何错误,这是我在stackoverflow的第一篇文章

if (sList.getCurrentShapeType() == "rec") {
不确定它是否能解决您的问题,但不要使用“==”来比较对象

相反,您应该使用
equals(…)
方法

if ("rec".equals(sList.getCurrentShapeType()) {
注意:我更改了测试的顺序,因此您不必担心getCurrentShapeType()方法返回空值

else if (k.getBorderByPoint(e.getPoint()) == 4)
另外,我不知道getBorderByPoint()方法的作用,但为什么要将其与整数值进行比较。我们不知道“4”是什么意思。不要使用“幻数”,而是创建如下变量:CURSOR\u NORTH。或者更好的是,为什么不从该方法返回游标,这样就不必检查两次值

不确定它是否能解决您的问题,但不要使用“==”来比较对象

相反,您应该使用
equals(…)
方法

if ("rec".equals(sList.getCurrentShapeType()) {
注意:我更改了测试的顺序,因此您不必担心getCurrentShapeType()方法返回空值

else if (k.getBorderByPoint(e.getPoint()) == 4)
另外,我不知道getBorderByPoint()方法的作用,但为什么要将其与整数值进行比较。我们不知道“4”是什么意思。不要使用“幻数”。而是创建如下变量:CURSOR\u NORTH。或者更好的是,为什么不直接从该方法返回游标,这样就不必检查两次值

不确定它是否能解决您的问题,但不要使用“==”来比较对象

相反,您应该使用
equals(…)
方法

if ("rec".equals(sList.getCurrentShapeType()) {
注意:我更改了测试的顺序,因此您不必担心getCurrentShapeType()方法返回空值

else if (k.getBorderByPoint(e.getPoint()) == 4)
另外,我不知道getBorderByPoint()方法的作用,但为什么要将其与整数值进行比较。我们不知道“4”是什么意思。不要使用“幻数”,而是创建如下变量:CURSOR\u NORTH。或者更好的是,为什么不从该方法返回游标,这样就不必检查两次值

不确定它是否能解决您的问题,但不要使用“==”来比较对象

相反,您应该使用
equals(…)
方法

if ("rec".equals(sList.getCurrentShapeType()) {
注意:我更改了测试的顺序,因此您不必担心getCurrentShapeType()方法返回空值

else if (k.getBorderByPoint(e.getPoint()) == 4)


另外,我不知道getBorderByPoint()方法的作用,但为什么要将其与整数值进行比较。我们不知道“4”是什么意思。不要使用“幻数”。而是创建如下变量:CURSOR\u NORTH。或者更好的是,为什么不直接从该方法返回光标,这样就不必检查两次值。

不要使用
==
比较字符串=。请改用
equals(…)
equalsIgnoreCase(…)
方法。了解
==
检查两个对象引用是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的重点。不要使用
==
比较字符串=。请改用
equals(…)
equalsIgnoreCase(…)
方法。了解
==
检查两个对象引用是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的重点。不要使用
==
比较字符串=。请改用
equals(…)
equalsIgnoreCase(…)
方法。了解
==
检查两个对象引用是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的重点。不要使用
==
比较字符串=。请改用
equals(…)
equalsIgnoreCase(…)
方法。了解
==
检查两个对象引用是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题所在。我确信这不是问题所在,因为当我离开窗口并用鼠标返回时,该方法将起作用。@domKi,首先修复代码,然后进行注释。那你就不用猜了。然后,如果它不起作用,发布一个适当的帖子来说明问题。我希望现在情况会好一些。@domKi,那不是一个
SSCCE
。使用JPanel创建JFrame,并将MouseMotionListener添加到面板中。发布编译和执行的正确SSCCE需要15-20行。很可能你会在创建SSCCE时发现问题。我确信这不是问题所在,因为当我离开窗口并用鼠标返回时,该方法会起作用。@domKi,首先修复代码,然后进行注释。那你就不用猜了。然后,如果它不起作用,发布一个适当的帖子来说明问题。我希望现在情况会好一些。@domKi,那不是一个
SSCCE
。使用JPanel创建JFrame,并将MouseMotionListener添加到面板中。发布编译和执行的正确SSCCE需要15-20行。很可能您会在创建SSCCE时发现问题。我确信这不是问题所在,因为当我离开窗口并用鼠标返回时,该方法会起作用。@domKi,首先修复代码并