java - 鼠标位置更新不正确

标签 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.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();
            }

        }

    }

}

最佳答案

只需向 JButton 添加一个 MouseListener 即可。或者更好的方法仍然是向按钮的模型添加一个 ChangeListener,并在其中调用模型上的 isRollover()

关于java - 鼠标位置更新不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10569675/

相关文章:

java - switch 语句中使用的 char 数组

java - OpenGL 2.0 glGetUniformLocation : glError 1282 in draw()

Java 与 JFrame 和类交互

actionscript-3 - 拖动容器的子项时 mouseX/Y 混淆

events - 为什么我的 javascript 鼠标事件没有触发?

java - 通过单击对话框外部来关闭对话框

java - 无法在 Windows 32 位中使用 Web 驱动程序导航到 Safari 中的给定 URL

java - 如何设置 JTableBinding 中的列大小?

java - JComponent 调整大小时消失?

delphi - 当鼠标离开我的控制时如何触发事件?