gpt4 book ai didi

java - 在 java swing 中组件移动完成后想要记录一次组件位置

转载 作者:行者123 更新时间:2023-12-02 11:52:50 25 4
gpt4 key购买 nike

我想将目标位置显示为组件移动到位置 - Xloc:634.0, yloc:394.0

import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JFrame;

public class ComponentEventDemo extends JFrame {
public ComponentEventDemo() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(400, 400);
this.setVisible(true);
}

public static void main(String[] args) {
final ComponentEventDemo component = new ComponentEventDemo();
component.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
logLocation(component);
}
});

}

public static void logLocation(ComponentEventDemo component) {
System.out.println("Component moved to location - Xloc:" + component.getBounds().getMinX() + ", yloc:"
+ component.getBounds().getMinY());
}
}

在移动我的框架时,我想要移动完成后的框架位置

我收到单个移动事件的多个日志,例如

示例输出

“组件已移动到位置 - Xloc:0.0、yloc:0.0

组件已移动到位置 - Xloc:5.0、yloc:2.0

组件已移至位置 - Xloc:15.0、yloc:11.0

组件已移至位置 - Xloc:29.0、yloc:24.0

组件已移至位置 - Xloc:50.0、yloc:41.0

组件已移至位置 - Xloc:76.0、yloc:64.0

组件已移至位置 - Xloc:113.0、yloc:95.0

组件已移至位置 - Xloc:150.0、yloc:124.0

组件已移至位置 - Xloc:191.0、yloc:154.0

组件已移至位置 - Xloc:238.0、yloc:185.0

组件已移至位置 - Xloc:288.0、yloc:214.0"

我正在查找鼠标释放后的最后一条日志。

谢谢你的建议。我对我的代码进行了如下更改`

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.Timer;

import javax.swing.JFrame;

public class ComponentEventDemo extends JFrame {
Timer timer = new Timer(500, new MyTimer());
static ComponentEventDemo component;

public ComponentEventDemo() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(400, 400);
this.setVisible(true);
}

public static void main(String[] args) {
component = new ComponentEventDemo();
component.addListener(component);
}

public void addListener(final ComponentEventDemo component) {

component.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
timer.start();
}
});
}

class MyTimer implements ActionListener {
public void actionPerformed(ActionEvent e) {
logLocation();
timer.stop();
}
}

public void logLocation() {
System.out.println("Component moved to location - Xloc:" + component.getBounds().getMinX() + ", yloc:"
+ component.getBounds().getMinY());
}
}

`它减少了输出中的日志数量,但没有达到完整的目标。寻找其他选择..提前感谢您的帮助..

最佳答案

I am looking for last log after mouse released.

由于框架的拖动是由操作系统控制的,并且您无权访问框架上生成的鼠标事件,因此无法获取该信息。

您可以尝试使用 Swing Timer。您安排计时器在特定时间段(假设 500 毫秒)后触发。

在 componentMoved 事件中,您启动/重新启动计时器。因此,如果用户不断拖动框架,计时器将不会触发。然后,如果用户在 500ms 内没有拖动框架,则会生成 Timer 事件,您可以获取当前框架位置。

所以,是的,使用此解决方案在了解帧位置方面总会有一些延迟。

关于java - 在 java swing 中组件移动完成后想要记录一次组件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47773563/

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