Hi,
hab eben den ComponentListener entdeckt und leider auch die Tatsache
das dieser bei einem Resize mehrere Events auslöst ...
Bei aufwendigen Code (z.B. Image resizen),
kann das Programm schonmal "stocken".
Als erste Möglichkeit habe ich den Timer entdeckt:
Java Swing Development: componentMoved and componentResized on JFrame
Diese Lösung finde ich nicht ganz so gut,
meine Idee wäre ein wenig anderes.
Ich vergleiche immer eine ältere Fenstergröße mit einer neueren,
dass Event wird erst ausgeführt,
wenn eine gewissen Zeit sich die Fenstergröße nicht geändert hat:
Allerdings hackt das auch ein wenig,
bzw, dauert bis er erkennt, wann er das Event ausführen soll
(wenn auch nicht so viel wie bei dem Timer).
Gibt es eine Methode oder Möglichkeit die ich übersehen habe?
hab eben den ComponentListener entdeckt und leider auch die Tatsache
das dieser bei einem Resize mehrere Events auslöst ...
Bei aufwendigen Code (z.B. Image resizen),
kann das Programm schonmal "stocken".
Als erste Möglichkeit habe ich den Timer entdeckt:
Java Swing Development: componentMoved and componentResized on JFrame
Diese Lösung finde ich nicht ganz so gut,
meine Idee wäre ein wenig anderes.
Ich vergleiche immer eine ältere Fenstergröße mit einer neueren,
dass Event wird erst ausgeführt,
wenn eine gewissen Zeit sich die Fenstergröße nicht geändert hat:
Java:
...
@Override
public void componentResized(ComponentEvent e) {
startResize();
}
...
private Thread t;
private void startResize() {
if (t == null) {
t = new Thread() {
@Override
public void run() {
super.run();
boolean same = false;
while (!same) {
int lastw = getWidth();
int lasth = getHeight();
for (int i = 0; i < 10; i++) {
if (lastw == getWidth() && lasth == getHeight()) {
same = true;
} else {
same = false;
}
}
}
try {
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
resizeImage();
}
});
} catch (Exception e) {
// TODO: handle exception
}
t = null;
}
};
t.start();
}
}
Allerdings hackt das auch ein wenig,
bzw, dauert bis er erkennt, wann er das Event ausführen soll
(wenn auch nicht so viel wie bei dem Timer).
Gibt es eine Methode oder Möglichkeit die ich übersehen habe?