Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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_Awt - Fatal编程技术网

Java 如何获取JPanel中鼠标指针的位置(无需任何鼠标操作)?

Java 如何获取JPanel中鼠标指针的位置(无需任何鼠标操作)?,java,swing,awt,Java,Swing,Awt,我可以通过在JPanel上添加一个MouseAdapter来获取鼠标指针的位置。但是,它仅在用户移动鼠标指针或执行某些其他操作时起作用。代码如下: import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JP

我可以通过在JPanel上添加一个MouseAdapter来获取鼠标指针的位置。但是,它仅在用户移动鼠标指针或执行某些其他操作时起作用。代码如下:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class LocationTest {
    public static void main(String[] args) {
        LocationTest locationTest = new LocationTest();
        locationTest.createUI();
    }

    public void createUI(){
        JFrame frame = new JFrame("Location Test");
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MainPanel mainPanel = new MainPanel();
        mainPanel.addMouseListener(new CustomMouseListener());
        mainPanel.addMouseMotionListener(new CustomMouseListener());
        frame.add(mainPanel,BorderLayout.CENTER);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    @SuppressWarnings("serial")
    class MainPanel extends JPanel{
        @Override
        public Dimension getPreferredSize() {
            // TODO Auto-generated method stub
            return new Dimension(400,300);
        }
    }

    class CustomMouseListener extends MouseAdapter{
        @Override
        public void mouseClicked(MouseEvent e) {
            System.out.println("Click: " + e.getPoint().getX() + " , " + e.getPoint().getY());
        }

        @Override
        public void mousePressed(MouseEvent e) {
            System.out.println("Press: " + e.getPoint().getX() + " , " + e.getPoint().getY());
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            System.out.println("Release: " + e.getPoint().getX() + " , " + e.getPoint().getY());
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            System.out.println("Drag: " + e.getPoint().getX() + " , " + e.getPoint().getY());
        }

        @Override
        public void mouseMoved(MouseEvent e) {
            System.out.println("MouseMove: " + e.getPoint().getX() + " , " + e.getPoint().getY());
        }
    }
}
是否可以在不使用任何鼠标操作的情况下获取位置?例如,我可以随时使用panel.getPointerLocation获取此信息


提前感谢您的帮助。

使用MouseInfo.getPointerInfo().getLocation()随时获取当前鼠标位置。

使用MouseInfo.getPointerInfo().getLocation()随时获取当前鼠标位置。

使用MouseInfo.getPointerInfo().getLocation()随时获取当前鼠标位置。

使用MouseInfo.getPointerInfo().getLocation()随时获取当前鼠标位置。

定义一个新界面,以便侦听器可以向面板提供反馈:

public interface PointHolder {
    /**
     * Pass the new mouse location.
     * Pass null if the mouse left the panel
     */
    public void setPoint(Point newpoint);
}
让主面板实现它:

public MainPanel extends JPanel implements PointHolder {
    private Point lastpoint;
    @Override
    public void setPoint(Point newpoint) {
        lastpoint=newpoint;
    }
    public Point getPointerLocation() {
        return lastpoint;
    }
}
向CustomMouseListener添加构造函数:

public CustomMouseListener {
    PointHolder holder;
    public CustomMouseListener(PointHolder holder) {
       this.holder=holder;
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        holder.setPoint(e.getPoint());

        System.out.println("MouseMove: " + e.getPoint().getX() + " , " + e.getPoint().getY());
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        holder.setPoint(null);
    }
}
主要是:

    MainPanel mainPanel = new MainPanel();
    CustomMouseListener listener=new CustomMouseListener(mainPanel);
    mainPanel.addMouseListener(listener);
    mainPanel.addMouseMotionListener(listener);

从现在起,您可以调用
mainPanel.getPointerLocation()
,如果鼠标不再在面板上,它将返回null。

定义一个新界面,以便侦听器可以向面板提供反馈:

public interface PointHolder {
    /**
     * Pass the new mouse location.
     * Pass null if the mouse left the panel
     */
    public void setPoint(Point newpoint);
}
让主面板实现它:

public MainPanel extends JPanel implements PointHolder {
    private Point lastpoint;
    @Override
    public void setPoint(Point newpoint) {
        lastpoint=newpoint;
    }
    public Point getPointerLocation() {
        return lastpoint;
    }
}
向CustomMouseListener添加构造函数:

public CustomMouseListener {
    PointHolder holder;
    public CustomMouseListener(PointHolder holder) {
       this.holder=holder;
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        holder.setPoint(e.getPoint());

        System.out.println("MouseMove: " + e.getPoint().getX() + " , " + e.getPoint().getY());
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        holder.setPoint(null);
    }
}
主要是:

    MainPanel mainPanel = new MainPanel();
    CustomMouseListener listener=new CustomMouseListener(mainPanel);
    mainPanel.addMouseListener(listener);
    mainPanel.addMouseMotionListener(listener);

从现在起,您可以调用
mainPanel.getPointerLocation()
,如果鼠标不再在面板上,它将返回null。

定义一个新界面,以便侦听器可以向面板提供反馈:

public interface PointHolder {
    /**
     * Pass the new mouse location.
     * Pass null if the mouse left the panel
     */
    public void setPoint(Point newpoint);
}
让主面板实现它:

public MainPanel extends JPanel implements PointHolder {
    private Point lastpoint;
    @Override
    public void setPoint(Point newpoint) {
        lastpoint=newpoint;
    }
    public Point getPointerLocation() {
        return lastpoint;
    }
}
向CustomMouseListener添加构造函数:

public CustomMouseListener {
    PointHolder holder;
    public CustomMouseListener(PointHolder holder) {
       this.holder=holder;
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        holder.setPoint(e.getPoint());

        System.out.println("MouseMove: " + e.getPoint().getX() + " , " + e.getPoint().getY());
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        holder.setPoint(null);
    }
}
主要是:

    MainPanel mainPanel = new MainPanel();
    CustomMouseListener listener=new CustomMouseListener(mainPanel);
    mainPanel.addMouseListener(listener);
    mainPanel.addMouseMotionListener(listener);

从现在起,您可以调用
mainPanel.getPointerLocation()
,如果鼠标不再在面板上,它将返回null。

定义一个新界面,以便侦听器可以向面板提供反馈:

public interface PointHolder {
    /**
     * Pass the new mouse location.
     * Pass null if the mouse left the panel
     */
    public void setPoint(Point newpoint);
}
让主面板实现它:

public MainPanel extends JPanel implements PointHolder {
    private Point lastpoint;
    @Override
    public void setPoint(Point newpoint) {
        lastpoint=newpoint;
    }
    public Point getPointerLocation() {
        return lastpoint;
    }
}
向CustomMouseListener添加构造函数:

public CustomMouseListener {
    PointHolder holder;
    public CustomMouseListener(PointHolder holder) {
       this.holder=holder;
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        holder.setPoint(e.getPoint());

        System.out.println("MouseMove: " + e.getPoint().getX() + " , " + e.getPoint().getY());
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
        holder.setPoint(null);
    }
}
主要是:

    MainPanel mainPanel = new MainPanel();
    CustomMouseListener listener=new CustomMouseListener(mainPanel);
    mainPanel.addMouseListener(listener);
    mainPanel.addMouseMotionListener(listener);

从现在起,您可以调用
mainPanel.getPointerLocation()
,如果鼠标不再在面板上,它应该返回null。

然后询问您的帧在哪里?从当前鼠标位置减去帧位置。。。等等,看,斯特凡@马丁弗兰克。谢谢你的帮助。然后问你的相框在哪里?从当前鼠标位置减去帧位置。。。等等,看,斯特凡@马丁弗兰克。谢谢你的帮助。然后问你的相框在哪里?从当前鼠标位置减去帧位置。。。等等,看,斯特凡@马丁弗兰克。谢谢你的帮助。然后问你的相框在哪里?从当前鼠标位置减去帧位置。。。等等,看,斯特凡@马丁弗兰克。谢谢你的帮助。