Java 如何为自定义游标创建单独的类

Java 如何为自定义游标创建单独的类,java,mouseevent,mouse,mouselistener,custom-cursor,Java,Mouseevent,Mouse,Mouselistener,Custom Cursor,我试图把一个游戏作为一个个人项目,并希望自定义光标有两种状态;正常并单击。我如何为它创建一个单独的类,并在创建窗口的类中使用它 这只是一个学习的经验,并有机会创建一个游戏自定义光标。我尝试将代码放入Window类中,而不是为鼠标创建单独的类。这是可行的,但它很混乱,我想学习如何通过分离类来清理它 如果你不知道我是否在其中一个代码中有东西,就假设我没有。我对编程相当陌生,知道的不多 //This is the code that worked public class Window extends

我试图把一个游戏作为一个个人项目,并希望自定义光标有两种状态;正常并单击。我如何为它创建一个单独的类,并在创建窗口的类中使用它

这只是一个学习的经验,并有机会创建一个游戏自定义光标。我尝试将代码放入Window类中,而不是为鼠标创建单独的类。这是可行的,但它很混乱,我想学习如何通过分离类来清理它

如果你不知道我是否在其中一个代码中有东西,就假设我没有。我对编程相当陌生,知道的不多

//This is the code that worked
public class Window extends JFrame {
    Cursor normal = Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("Cursor.gif"), new Point(0, 0), "Gauntlet");
    Cursor clicked = Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("Cursor_Clicked.gif"), new Point(0, 0), "Gauntlet_Clicked");
    class myMouseListener implements MouseListener {
        @Override
        public void mouseEntered(MouseEvent arg0) {
            setCursor(normal);
        }
        public void mouseExited(MouseEvent arg0) {
        }
        @Override
        public void mouseClicked(MouseEvent arg0) {
        }
        @Override
        public void mousePressed(MouseEvent arg0) {
            setCursor(clicked);
        }
        @Override
        public void mouseReleased(MouseEvent arg0) {
            setCursor(normal);
        }
    }
    myMouseListener mml = new myMouseListener();
    public Window() {
        super.setSize(1200, 1000);
        super.addMouseListener(mml);
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        super.setVisible(true);
    }
    public static void main(String[] args) {
        new Window();
    }
}
对于当前的代码,我希望每当我按下鼠标左键时,就会有我的自定义光标发生变化,就像在功能代码中一样。然而,鼠标根本没有改变。就好像我甚至没有写任何代码一样

  • 您忘记将myMouseListener添加到鼠标对象
  • 我不相信你可以把一个JFrame添加到另一个JFrame中,你可以让鼠标扩展JPanel而不是JFrame
  • 当您编写
    c=normal
    c=clicked
    时,我相信这会更改鼠标类中
    c
    的指针,但不会更新超类的光标,因为该光标使用单独的变量保存,该变量仍然指向未初始化的
    c
    。要解决此问题,只需调用
    setCursor(正常)
    setCursor(单击)
    ,如下所示:
  • 您忘记将myMouseListener添加到鼠标对象
  • 我不相信你可以把一个JFrame添加到另一个JFrame中,你可以让鼠标扩展JPanel而不是JFrame
  • 当您编写
    c=normal
    c=clicked
    时,我相信这会更改鼠标类中
    c
    的指针,但不会更新超类的光标,因为该光标使用单独的变量保存,该变量仍然指向未初始化的
    c
    。要解决此问题,只需调用
    setCursor(正常)
    setCursor(单击)
    ,如下所示:

  • 我以前让它工作过,但现在不行了。在我的窗口类中如何使用鼠标类?@HaydenSmith我根本没有更改你的窗口类。我使用了与注释
    //相同的类,这是我修改过的鼠标顶部的当前代码,代码运行正常。我以前让它运行正常,但现在不行了。在我的窗口类中如何使用鼠标类?@HaydenSmith我根本没有更改你的窗口类。我使用了与注释
    //完全相同的类,这是我修改过的鼠标顶部的当前代码
    ,代码运行正常。
    //This is the current code
    public class Window extends JFrame {
        public Window() {
            super.setSize(1200, 1000);
            super.add(new Mouse());
            super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            super.setVisible(true);
        }
        public static void main(String[] args) {
            new Window();
        }
    }
    
    //This is the new class for the cursor that I'm having trouble with
    public class Mouse extends JFrame {
        public Mouse() {
            super.setCursor(c);
        }
        Cursor normal = Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("Cursor.gif"), new Point(0, 0), "Gauntlet");
        Cursor clicked = Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("Cursor_Clicked.gif"), new Point(0, 0), "Gauntlet_Clicked");
        Cursor c;
        class myMouseListener implements MouseListener {
            @Override
            public void mouseEntered(MouseEvent arg0) {
                c = normal;
            }
            public void mouseExited(MouseEvent arg0) {
            }
            @Override
            public void mouseClicked(MouseEvent arg0) {
            }
            @Override
            public void mousePressed(MouseEvent arg0) {
                c = clicked;
            }
            @Override
            public void mouseReleased(MouseEvent arg0) {
                c = normal;
            }
        }
    }
    
    public class Mouse extends JPanel {
        public Mouse() {
            this.addMouseListener(new myMouseListener());
        }
        Cursor normal = Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("Cursor.gif"), new Point(0, 0), "Gauntlet");
        Cursor clicked = Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("Cursor_Clicked.gif"), new Point(0, 0), "Gauntlet_Clicked");
        class myMouseListener implements MouseListener {
            @Override
            public void mouseEntered(MouseEvent arg0) {
                setCursor(normal);
            }
            public void mouseExited(MouseEvent arg0) {
            }
            @Override
            public void mouseClicked(MouseEvent arg0) {
            }
            @Override
            public void mousePressed(MouseEvent arg0) {
                setCursor(clicked);
            }
            @Override
            public void mouseReleased(MouseEvent arg0) {
                setCursor(normal);
            }
        }
    }