Java 鼠标位置更新不正确
我试图得到鼠标的位置,并在光标在上面时点亮一个按钮。但是,鼠标位置没有正确更新。我认为y的位置是混乱的,因为目前如果我远远高于按钮,它会亮起 以下是我不正确的代码: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
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)时,它亮起。