Java 鼠标位置更新不正确

Java 鼠标位置更新不正确,java,swing,mouse,jframe,jbutton,Java,Swing,Mouse,Jframe,Jbutton,我试图得到鼠标的位置,并在光标在上面时点亮一个按钮。但是,鼠标位置没有正确更新。我认为y的位置是混乱的,因为目前如果我远远高于按钮,它会亮起 以下是我不正确的代码: public void mouseMoved(MouseEvent e) { Window.mse = new Point((e.getX()) + ((Frame.size.width - Window.myWidth)/2), (e.getY()) + (Frame.size.height - (Window.myHei

我试图得到鼠标的位置,并在光标在上面时点亮一个按钮。但是,鼠标位置没有正确更新。我认为y的位置是混乱的,因为目前如果我远远高于按钮,它会亮起

以下是我不正确的代码:

public void mouseMoved(MouseEvent e) {
    Window.mse = new Point((e.getX()) + ((Frame.size.width - Window.myWidth)/2), (e.getY()) + (Frame.size.height - (Window.myHeight)/2));
}
这是窗口文件:

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;

public class Window extends JPanel implements Runnable {

    public Thread thread = new Thread(this);

    public static Image[] tileset_ground = new Image[100];
    public static Image[] tileset_air = new Image[100];
    public static Image[] tileset_resources = new Image[100];

    public static int myWidth, myHeight;

    public static boolean isFirst = true;

    public static Point mse = new Point(0, 0);

    public static Room room;
    public static Levels levels;
    public static Shop shop;

    public Window(Frame frame) {
        frame.addMouseListener(new KeyHandler());
        frame.addMouseMotionListener(new KeyHandler());

        thread.start();
    }

    public void define() {
        room = new Room();
        levels = new Levels();
        shop = new Shop();

        tileset_resources[0] = new ImageIcon("resources/cell.png").getImage();

        levels.loadLevels(new File("levels/level1.level"));

        for(int i=0;i<tileset_ground.length; i++) {
            tileset_ground[i] = new ImageIcon("resources/tileset_ground.png").getImage();
            tileset_ground[i] = createImage(new FilteredImageSource(tileset_ground[i].getSource(), new CropImageFilter(0, 32 * i, 32, 32)));
        }

        for(int i=0;i<tileset_air.length; i++) {
            tileset_air[i] = new ImageIcon("resources/tileset_air.png").getImage();
            tileset_air[i] = createImage(new FilteredImageSource(tileset_air[i].getSource(), new CropImageFilter(0, 32 * i, 32, 32)));
        }

    }

    public void paintComponent(Graphics g) {
        if(isFirst) {

            myWidth = getWidth();
            myHeight = getHeight();

            define();

            isFirst = false;
        }

        g.setColor(new Color(70, 70, 70));
        g.fillRect(0, 0, myWidth, myHeight);
        g.setColor(new Color(0, 0, 0));
        g.drawLine(room.block[0][0].x, room.block[room.worldHeight - 1][0].y + room.blockSize, room.block[0][room.worldWidth - 1].x + room.blockSize, room.block[room.worldHeight - 1][0].y + room.blockSize);
        g.drawLine(room.block[0][0].x, room.block[room.worldHeight - 1][0].y + 1 + room.blockSize, room.block[0][room.worldWidth - 1].x + room.blockSize, room.block[room.worldHeight - 1][0].y + 1 + room.blockSize);


        room.draw(g); //Draws room
        shop.draw(g); //Draws shop
    }

    public void run() { 
        while(true) {

            if(!isFirst) {
                room.physic();
            }

            repaint();

            try {
                Thread.sleep(1);
            } catch(Exception e) {
                e.printStackTrace();
            }

        }

    }

}
import javax.swing.*;
导入java.awt.*;
导入java.awt.image.*;
导入java.io.*;
公共类窗口扩展JPanel实现可运行{
公共线程线程=新线程(此);
公共静态图像[]tileset_地面=新图像[100];
公共静态图像[]tileset_air=新图像[100];
公共静态图像[]tileset_resources=新图像[100];
公共静态int myWidth,myHeight;
公共静态布尔值isFirst=true;
公共静态点mse=新点(0,0);
公共静电室;
公共静态水平;
公共静电店;
公共窗(框架){
addMouseListener(新的KeyHandler());
addMouseMotionListener(新的KeyHandler());
thread.start();
}
public void define(){
房间=新房间();
级别=新级别();
商店=新商店();
tileset_resources[0]=新建图像图标(“resources/cell.png”).getImage();
levels.loadLevels(新文件(“levels/level1.level”);

对于(int i=0;i只需向JButton添加一个鼠标侦听器。或者更好的做法是向按钮的模型添加一个ChangeListener,并在其中调用模型上的
isRollover()

只需向JButton添加一个鼠标侦听器。或者更好的做法是向按钮的模型添加一个ChangeListener,并在其中调用
isRollover()
在模型上。

为什么不简单地将鼠标侦听器添加到JButton?或者更好的做法是,向JButton的模型中添加一个ChangeListener。我需要多次使用鼠标的位置,以便尝试将其用作变量。然后,当按钮包含变量(mse)时它亮了。没关系,我通过删除结尾处的(/2)解决了这个问题。为什么不简单地在JButton中添加一个MouseListener?或者更好的是,在JButton的模型中添加一个ChangeListener。我需要多次使用鼠标的位置,所以我尝试将其用作变量。然后当按钮包含变量(mse)时它亮了。没关系,我通过删除结尾处的(/2)解决了这个问题。我还需要多次使用鼠标的位置,因此我尝试将其用作变量。然后当按钮包含变量(mse)时它亮起。我需要多次使用鼠标的位置,因此我尝试将其用作变量。然后,当按钮包含变量(mse)时,它亮起。