gpt4 book ai didi

java - 单击并拖动后 JWindow 的坐标

转载 作者:行者123 更新时间:2023-12-01 10:39:51 25 4
gpt4 key购买 nike

我有一个程序,其中有 JWindows,可以通过单击和拖动来重新定位。仅供引用,它们是透明的并且有蓝色边框。我想知道通过单击和拖动重新定位矩形(边框)左上角的坐标。当我单击 gui 中的按钮时,将调用 captureComponent() 来获取框左上角的当前 x 和 y 坐标。我一直在尝试用 Point loc = this.getLocation(); 来做到这一点当我将它放在 MousePressed 之外时,我会在单击它并将其拖动到其他地方之前获取坐标。当我尝试将其放入 MousePressed 中以便它为我提供更新的值时,它给我错误无法找到符号:方法 getLocation()。我该怎么做才能解决这个问题,以便它给我更新的值?

import javax.swing.*;
import java.awt.event.*;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Point;
import javax.swing.border.LineBorder;

//test
public class Box extends JWindow {

JPanel p=new JPanel();
public Box()
{

this.setAlwaysOnTop(true);
this.setBackground(new Color(0, 0, 0, 0));
setContentPane(p);
setSize(50,25);
//this.setLocation(50, 50);

p.setBorder(new LineBorder(Color.blue));
p.setLayout(new FlowLayout());
p.setBackground(new Color(0, 0, 0, 0));
p.addMouseListener(adapter);
p.addMouseMotionListener(adapter);

}

MouseAdapter adapter= new MouseAdapter()
{

int x,y;
public void mousePressed(MouseEvent e)
{
if(e.getButton()==MouseEvent.BUTTON1)
{
x = e.getX();
y = e.getY();
}
}

public void mouseDragged(MouseEvent e)
{
if( (e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) != 0)
{
setLocation(e.getXOnScreen()-x,e.getYOnScreen()-y);
Point loc = this.getLocation();

}
}

};


public void captureComponent() {


System.out.println(loc);


}

}

当按下按钮时,从另一个类调用 captureComponent 方法:

    btnSnap.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent event) {
JButton clickedButton = (JButton) event.getSource();
if (clickedButton == btnSnap) {

//new captureComponent();
//System.out.println("test");
Box capture = new Box();
capture.captureComponent();
}
}
});

最佳答案

it gives me the error cannot find symbol: methods getLocation().

您的 MouseListener 不是组件,因此除非您有对组件的引用,否则您无法使用该方法。

一种方法是获取生成事件的组件的窗口:

Component component = e.getComponent();
Window window = SwingUtilities.windowForComponent( component );
Point location = window.getLocation();

编辑:

When I click a button in my gui a call will be made to captureComponent() to get the current x and y coordinate of the top left corner of the box.

第一次错过了上述声明。你的代码太复杂了。如果您只想知道单击按钮时窗口的位置,则只需在 captureComponent() 方法中调用 getLocation() 方法即可。无需每次拖动窗口时都保存位置。

关于java - 单击并拖动后 JWindow 的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com