java中怎么获取一个窗口移动后的坐标

在网上查了很多,很久发现都是getX()等常用的API方法,这些方法根本不能获取一个移动后的窗口的坐标。获取的都是窗口的初始坐标。窗口移动后,他的坐标变化了,用这些方法是不能获取的。后来找高手在谷歌上用英文查询才查到下面这些方法。我相信肯定能帮助不少人。不用像我一样话费很久才能解决。

void javax.swing.SwingUtilities.convertPointToScreen(Point p, Component c)

Convert a point from a component's coordinate system to screen coordinates.

Parameters:

p a Point object (converted to the new coordinate system)

c a Component object

eg: Point pt = new Point();

pt.x = graphicsPanel.getX();

pt.y = graphicsPanel.getY();

SwingUtilities.convertPointToScreen(pt, graphicsPanel.getParent());

Rectangle captureSize = new Rectangle(pt.x,pt.y,graphicsPanel.getWidth(),

graphicsPanel.getHeight());

◆Point convertPoint(Component source, int x, int y, Component estination)

◆Point convertPoint(Component source, Point aPoint, Component destination)

将一个组件上的点坐标转换成另一个组件上的坐标点。

◆void convertPointFromScreen(Point p, Component c)

将一个屏暮坐标点转换成一个组件的坐标点.

◆void convertPointToScreen(Point p, omponent c)

将一个组件上的坐标点转换成屏暮坐标。

◆Rectangle convertRectangle(Component source, Rectangle aRectangle, Component destination)

将一个组件上的矩形坐标转换成另一个组件上的矩形坐标.

我用的是convertPointToScreen(Point p, Component c)方法,上面是我的程序所用的那部分内容。这个函数能够根据相对性转化出移动后窗口的坐标(就是移动后窗口左上角坐标),然后我用Rectangle类截取窗口图片。

不懂的还可以由javax.swing.SwingUtilities.convertPointToScreen查询javaAPI来具体了解 希望能够帮助读者

实现这个功能的方法可以使用Java的AWT或者Swing库。 首先,需要创建一个继承自JPanel的自定义面板类,然后在该类重写paintComponent(Graphics g)方法,用于绘制人物和背景。 然后,需要添加MouseListener和MouseMotionListener的监听器,用于监听鼠标的移动事件。在鼠标移动事件,可以获取当前鼠标的坐标,并将人物的位置设置为鼠标的坐标,然后调用repaint()方法进行重绘。 下面是一个示例代码: ```java import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; import javax.swing.JPanel; public class GamePanel extends JPanel implements MouseListener, MouseMotionListener { private Point playerPos; public GamePanel() { setBackground(Color.WHITE); addMouseListener(this); addMouseMotionListener(this); playerPos = new Point(0, 0); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLUE); g.fillRect(playerPos.x, playerPos.y, 50, 50); } @Override public void mouseDragged(MouseEvent e) { // do nothing } @Override public void mouseMoved(MouseEvent e) { playerPos = e.getPoint(); repaint(); } @Override public void mouseClicked(MouseEvent e) { // do nothing } @Override public void mouseEntered(MouseEvent e) { // do nothing } @Override public void mouseExited(MouseEvent e) { // do nothing } @Override public void mousePressed(MouseEvent e) { // do nothing } @Override public void mouseReleased(MouseEvent e) { // do nothing } public static void main(String[] args) { JFrame frame = new JFrame("GamePanel"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(400, 400); GamePanel panel = new GamePanel(); frame.add(panel); frame.setVisible(true); } } ``` 该示例代码创建了一个继承自JPanel的GamePanel类,用于绘制人物和背景。在该类添加了MouseListener和MouseMotionListener的监听器,用于监听鼠标的移动事件。在鼠标移动事件,将人物的位置设置为鼠标的坐标,并调用repaint()方法进行重绘。最后,在main方法创建了一个JFrame窗口,并将GamePanel添加到该窗口
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值