3

ドラッグ中に JFrame の位置を検出する方法はありますか? 問題は、MAX OS X では、マウスの移動を停止するとウィンドウの位置が更新されることです。新しい位置を計算し、ウィンドウマニュアルの位置を設定するヒントを見ました。しかし、そのため、ドラッグを開始したときの位置を知る必要があります。もう少し明確にするために、JFrame を使用して画面をキャプチャしますが、移動しても更新されず、古い位置にあると見なされます。ドラッグの移動を停止すると (ただし、マウス ボタンを押したままにすることはできます)、更新されます。

import java.awt.event.ComponentListener;
import java.awt.Component;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;

void setup() {
  frame.addComponentListener(new ComponentListener() 
  {  
    public void componentMoved(ComponentEvent evt) {
      Component c = (Component)evt.getSource();
      println("moved "+frameCount);
    }

    public void componentShown(ComponentEvent evt) {}

    public void componentResized(ComponentEvent evt) {}

    public void componentHidden(ComponentEvent evt) {}
  }
  );
}

void draw() {
}
4

1 に答える 1

4

ウィンドウの移動が停止したときにのみ発生する更新について言及したことがあり、ドラッグを開始したときの位置を知っていれば問題を本当に解決できる場合は、最後の場所をいくつかの変数に保存し、それぞれを更新するオプションが表示されます動きを検出する時間。

したがって、JFrame クラスでプライベート変数を宣言します。

ポイント originLocation=新しいポイント(0,0);

リスナーメソッドでは、次のことができます。

    public void componentMoved(ComponentEvent evt) {
          Component c = (Component)evt.getSource();
          Point currentLocationOnScreen=c.getLocationOnScreen();

 // do your requirements here with the variables currentLocationOnScreen and originLocation

          // update the originLocation variable for next occurrences of this method 
          originLocation=currentLocationOnScreen; 
    } 
于 2012-10-11T12:38:41.570 に答える