Moin moin!
Ich stehe etwas auf dem Schlauch... ;(
Ein ComponentListener, welcher z. B. zu einem JFrame hinzugefügt wurde, reagiert wunderbar, wenn der JFrame verschoben bzw. in seiner Größe verändert wurde. Leider gibt es einen Haken...
Ändert man die Größe so, dass sich auch die Position des JFrames verändert (z. B. durch das Verkleinern an der oberen linken Ecke des JFrames), so lässt sich während des resized-Ereignisses nur die aktuelle Größe ermitteln, nicht aber die "neue", durch die Größenänderung verursachte, neue Position.
Dieses Verhalten der "fehlerhaften" getLocation() führt dazu, dass alle Methoden, welche die "oben links"-, "[0;0]"- bzw. Ursprungsposition benötigen, sei es vom JFrame selber oder von dessen Komponenten, falsche Werte wirft.
Betroffen sind auch prominente Methoden wie die getMouseLocation()...
Sobald der JFrame bewegt wird (ein moved-Ereignis wird geworfen) geben die getLocation()-Methoden wieder korrekte Werte.
Hat jemand eine Lösung oder eine Idee, wie man die fehlerhaften Werte vermeiden kann?
Ciao, :rtfm:
Ich stehe etwas auf dem Schlauch... ;(
Ein ComponentListener, welcher z. B. zu einem JFrame hinzugefügt wurde, reagiert wunderbar, wenn der JFrame verschoben bzw. in seiner Größe verändert wurde. Leider gibt es einen Haken...
Ändert man die Größe so, dass sich auch die Position des JFrames verändert (z. B. durch das Verkleinern an der oberen linken Ecke des JFrames), so lässt sich während des resized-Ereignisses nur die aktuelle Größe ermitteln, nicht aber die "neue", durch die Größenänderung verursachte, neue Position.
Java:
public class Test extends JFrame {
public Test() {
JPanel panel = new JPanel();
this.setContentPane(panel);
this.addComponentListener(new ComponentListener() {
public void componentShown(ComponentEvent e) {}
public void componentResized(ComponentEvent e) {
/*
* getLocationOnScreen() wird nicht aktualisiert, wenn die Größe
* - an der oberen linken Ecke,
* - am oberen Rand
* - am linken Rand
* verändert wird. Lösung?!
*/
System.out.println(e.getComponent().getLocationOnScreen() + " " + e.getComponent().getSize());
}
public void componentMoved(ComponentEvent e) {
System.out.println(e.getComponent().getLocationOnScreen() + " " + e.getComponent().getSize());
}
public void componentHidden(ComponentEvent e) {}
});
}
public static void main(String[] args) {
Test test = new Test();
test.setSize(400,400);
test.setVisible(true);
}
}
Dieses Verhalten der "fehlerhaften" getLocation() führt dazu, dass alle Methoden, welche die "oben links"-, "[0;0]"- bzw. Ursprungsposition benötigen, sei es vom JFrame selber oder von dessen Komponenten, falsche Werte wirft.
Betroffen sind auch prominente Methoden wie die getMouseLocation()...
Sobald der JFrame bewegt wird (ein moved-Ereignis wird geworfen) geben die getLocation()-Methoden wieder korrekte Werte.
Hat jemand eine Lösung oder eine Idee, wie man die fehlerhaften Werte vermeiden kann?
Ciao, :rtfm: