Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取光标坐标作为相对于JPanel的点_Java_Swing_Cursor_Location_Jpanel - Fatal编程技术网

Java 获取光标坐标作为相对于JPanel的点

Java 获取光标坐标作为相对于JPanel的点,java,swing,cursor,location,jpanel,Java,Swing,Cursor,Location,Jpanel,如何获取JPanel上光标的坐标?我试过用这个: MouseInfo.getPointerInfo().getLocation(); 但这会返回屏幕上的位置。我尝试使用mouseMoved(MouseEvent m)方法,然后从m.getX()和m.getY()获取坐标,但没有调用该方法。(我正在使用MouseListener) 这是我的小组课: public class Panel extends JPanel implements Runnable, KeyListener, MouseL

如何获取JPanel上光标的坐标?我试过用这个:

MouseInfo.getPointerInfo().getLocation();
但这会返回屏幕上的位置。我尝试使用
mouseMoved(MouseEvent m)
方法,然后从
m.getX()
m.getY()
获取坐标,但没有调用该方法。(我正在使用
MouseListener

这是我的小组课:

public class Panel extends JPanel implements Runnable, KeyListener, MouseListener {

// serial
private static final long serialVersionUID = -2066956445832373537L;

// dimensions
public static final int WIDTH = 800;
public static final int HEIGHT = 600;

// game loop
private Thread thread;
private boolean running;
private final int FPS = 30;
private final int TARGET_TIME = 1000 / FPS;

// drawing
private BufferedImage image;
private Graphics2D g;

// status handler
private StatusHandler statusHandler;

// constructor
public Panel() {
    setPreferredSize(new Dimension(WIDTH, HEIGHT));
    setFocusable(true);
    requestFocus();
}

public void addNotify() {
    super.addNotify();
    if(thread == null) {
        addKeyListener(this);
        addMouseListener(this);
        thread = new Thread(this);
        thread.start();
    }
}

public void run() {

    init();

    long start;
    long elapsed;
    long wait;

    // game loop
    while(running) {

        start = System.nanoTime();

        update();
        render();
        renderToScreen();

        elapsed = System.nanoTime() - start;

        wait = TARGET_TIME - elapsed / 1000000;
        if(wait < 0) wait = TARGET_TIME;

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

    }

}

private void init() {
    running = true;
    image = new BufferedImage(WIDTH, HEIGHT, 1);
    g = (Graphics2D) image.getGraphics();
    statusHandler = new StatusHandler();
}

private void update() {
    statusHandler.update();
}

private void render() {
    statusHandler.render(g);
}

private void renderToScreen() {
    Graphics g2 = getGraphics();
    g2.drawImage(image, 0, 0, WIDTH, HEIGHT, null);
}

public void keyTyped(KeyEvent key) {}
public void keyPressed(KeyEvent key) {
    KeyInput.setKey(key.getKeyCode(), true);
}
public void keyReleased(KeyEvent key) {
    KeyInput.setKey(key.getKeyCode(), false);
}

public void mouseClicked(MouseEvent m) {}
public void mouseReleased(MouseEvent m) {
    MouseInput.setButton(m.getButton(), false);
    MouseInput.setMouseEvent(m);
}
public void mouseEntered(MouseEvent m) {}
public void mouseExited(MouseEvent m) {}
public void mousePressed(MouseEvent m) {
    MouseInput.setButton(m.getButton(), true);
    MouseInput.setMouseEvent(m);
}
公共类面板扩展JPanel实现可运行、KeyListener、MouseListener{
//连载
私有静态最终长serialVersionUID=-2066956445832373537L;
//尺寸
公共静态最终整数宽度=800;
公共静态最终内部高度=600;
//游戏循环
私有线程;
私有布尔运行;
私人最终积分FPS=30;
私人最终整数目标时间=1000/FPS;
//绘图
私有缓冲图像;
私有图形2dg;
//状态处理程序
私有StatusHandler StatusHandler;
//建造师
公共事务委员会(){
setPreferredSize(新尺寸(宽度、高度));
设置聚焦(真);
requestFocus();
}
public void addNotify(){
super.addNotify();
如果(线程==null){
addKeyListener(此);
addMouseListener(这个);
线程=新线程(此);
thread.start();
}
}
公开募捐{
init();
长起点;
久违;
漫长的等待;
//游戏循环
(跑步时){
start=System.nanoTime();
更新();
render();
renderToScreen();
已用=System.nanoTime()-开始;
等待=目标时间-已用时间/1000000;
如果(等待<0)等待=目标时间;
试一试{
线程。睡眠(等待);
}
捕获(例外e){
e、 printStackTrace();
}
}
}
私有void init(){
运行=真;
图像=新的缓冲区图像(宽度、高度、1);
g=(Graphics2D)image.getGraphics();
statusHandler=新的statusHandler();
}
私有void更新(){
statusHandler.update();
}
私有void render(){
statusHandler.render(g);
}
私有void renderToScreen(){
Graphics g2=getGraphics();
g2.drawImage(图像,0,0,宽度,高度,空);
}
public void keyTyped(KeyEvent key){}
按下公共无效键(KeyEvent键){
keyinport.setKey(key.getKeyCode(),true);
}
公共无效密钥已释放(KeyEvent密钥){
KeyInput.setKey(key.getKeyCode(),false);
}
公共无效mouseClicked(MouseEvent m){}
公共无效MouseEvent(MouseEvent m){
鼠标输入.setButton(m.getButton(),false);
MouseInput.setMouseEvent(m);
}
公共无效mouseenterned(MouseEvent m){}
public void mouseExited(MouseEvent m){}
公共空间鼠标按下(MouseEvent m){
鼠标输入.setButton(m.getButton(),true);
MouseInput.setMouseEvent(m);
}


}事件由
MouseMotionListener
处理
MouseMotionListener

事件由
MouseMotionListener
处理
MouseMotionListener

事件由
MouseMotionListener
处理
MouseMotionListener

MouseMotionListener

您是否将MouseListener添加到面板中?当您尝试此操作时,发布您的
SSCCE
演示问题。是的,我做了。我在问题中添加了小组代码。这不是SSCCE。如果您不知道SSCCE是什么,请搜索或访问web。您是否将鼠标侦听器添加到面板中?当您尝试此操作时,发布您的
SSCCE
演示问题。是的,我做了。我在问题中添加了小组代码。这不是SSCCE。如果您不知道SSCCE是什么,请搜索或访问web。您是否将鼠标侦听器添加到面板中?当您尝试此操作时,发布您的
SSCCE
演示问题。是的,我做了。我在问题中添加了小组代码。这不是SSCCE。如果您不知道SSCCE是什么,请搜索或访问web。您是否将鼠标侦听器添加到面板中?当您尝试此操作时,发布您的
SSCCE
演示问题。是的,我做了。我在问题中添加了小组代码。这不是SSCCE。如果你不知道什么是SSCCE,可以在网上搜索。是的,我刚刚发现了。无论如何谢谢你!是的,我刚想出来。无论如何谢谢你!是的,我刚想出来。无论如何谢谢你!是的,我刚想出来。无论如何谢谢你!