обнаружить перетаскивание jframe

Есть ли способ определить положение 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() {
}

person clankill3r    schedule 11.10.2012    source источник
comment
Проблема в том, что в MAX OS X положение окна обновляется, когда вы перестаете двигать мышь. И... почему именно это проблема для вашего приложения? Как в сторону. 1) Если приложение. делает снимок экрана, и на кадре видны какие-либо визуальные признаки перетаскивания, возможно, вы сможете проанализировать изображения, чтобы обнаружить движение. 2) Что должен был передавать некомпилируемый код?   -  person Andrew Thompson    schedule 11.10.2012


Ответы (1)


Если то, что вы упомянули об обновлении, происходит только тогда, когда окно перестало двигаться, и если знание положения, когда вы начали перетаскивание, действительно может решить проблему, то я вижу вариант, когда вы сохраняете последнее местоположение в некоторой переменной и обновляете его каждый раз. время, когда вы обнаруживаете движение.

Итак, объявите приватную переменную в вашем классе 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; 
    } 
person Community    schedule 11.10.2012