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

时间:2017-12-12 13:12:56

标签: java swing

我想将目标位置显示为 组件移动到位置 - 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());
  }
}

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

1 个答案:

答案 0 :(得分:1)

  

我正在寻找鼠标释放后的最后日志。

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

你可以尝试做的是使用Swing Timer。您安排计时器在一段时间后开火,比如500ms。

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

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