Hey,
ich habe ein Panel, das als Komponenten weitere Panels hat. Beim Programmstart möchte ich das Fenster zeigen, und danach eines der "inneren" Panels quasi ins Bild rollen lassen. D.h. ich hab ne Schleife die dieses Panel nimmt und Stück für Stück dessen Position ändert.
So, leider malt er mir nicht diesen Vorgang, sondern er malt mir das Ding nur wenn es komplett fertig verschoben ist, was natürlich doof aussieht und nicht der gewünschte Effekt ist.
Mir wurde bisher standardmässig immer zu EventQueue/SwingUtilities geraten, und das hat dann auch oft geklappt, aber diesmal nicht:
in der main:
Das Frame hat n Panel, und in diesem Panel ist wie gesagt das SidePanel. die Methode slideIn() vom SidePanel sieht so aus:
Jo.. wie gesagt er repaintet mir nicht während er das macht, sondern erst wenn er fertig ist. Why
ich habe ein Panel, das als Komponenten weitere Panels hat. Beim Programmstart möchte ich das Fenster zeigen, und danach eines der "inneren" Panels quasi ins Bild rollen lassen. D.h. ich hab ne Schleife die dieses Panel nimmt und Stück für Stück dessen Position ändert.
So, leider malt er mir nicht diesen Vorgang, sondern er malt mir das Ding nur wenn es komplett fertig verschoben ist, was natürlich doof aussieht und nicht der gewünschte Effekt ist.
Mir wurde bisher standardmässig immer zu EventQueue/SwingUtilities geraten, und das hat dann auch oft geklappt, aber diesmal nicht:
in der main:
Code:
MainFrame frame = new MainFrame(data);
frame.setVisible(true);
frame.getSidePanel().slideIn();
Das Frame hat n Panel, und in diesem Panel ist wie gesagt das SidePanel. die Methode slideIn() vom SidePanel sieht so aus:
Code:
public void slideIn() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
int xLoc;
while((xLoc = getLocation().x) > 500) {
setLocation(xLoc - 5, getLocation().y);
// Erklärung der nächsten 2 Zeilen: Ich war mir jetz nich so sicher, was ich überhaupt repainten muss...
// Das Panel, auf dem dieses Panel liegt, oder dieses Panel selbst? Immerhin mal ich ja nix rum in diesem Panel,
// sondern verschiebe es im Vater-Panel... Zumindest funktionieren beide Varianten (auch einzeln) nicht:
parent.repaint();
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
Jo.. wie gesagt er repaintet mir nicht während er das macht, sondern erst wenn er fertig ist. Why