Ik ben bezig met het maken van een gui, waarin ik tijdens het resizen van een frame een aantal dingen uitreken. Er wordt onder andere een plaatje gerescaled mbv
Dit rescalen (en er zijn andere dingen die potentieel even kunnen duren, zoals het uitrekenen van de positie van nodes), kan een paar seconden duren op de hoogste setting, gedurende welke tijd de gui unresponsive en 'dirty' is.
Ik zie hiervoor 2 mogelijke oplossingen, die ik beiden zonder succes heb proberen te implementeren. De eerste is door de berekeningen uit te voeren door een SwingWorker (wat niet echt helpt omdat de gui toch pas kan worden hertekend wanneer de operatie klaar is) en de andere is door de gebruiker even een bericht te laten zien en de interface af te dekken. Dit is de methode waar ik meer mee probeer te doen. In zijn meest simpele vorm stel ik me zo voor dat ik twee panels kan gebruiken. Een met mijn user interface en een met een bericht ,"resizing...", op een panel die over het andere panel heen wordt getekend. Een voorbeeld hiervan staat in de post hieronder.
De laatste paar regels zijn daarbij waar het om gaat: Het ene panel wordt invisible gemaakt en de andere visible wanneer het bericht moet worden gezien en vice versa.
Echter, dit werkt niet. Het (rode) contents panel blijft actief. Ook als ik het probeer met een invokeLater(Runnable r) of een invokeAndWait(Runnable r), dingen doe met invalidate(), setComponentZOrder(Component c, int index) of werk met andere layoutmanagers. (ik zal jullie de voorbeelden besparen tbv de postlengte)
Als je echter de tweede aanroep
Ik ben hier intussen bijna een volledige werkdag (<- stage) mee bezig, terwijl het niet eens een geplande feature was
. Waarschijnlijk mis ik iets subtiels in de manier waarop 'componentResized' werkt of een gedraging van Swing die ik mis.
Wie kan mij vertellen hoe ik deze relatief simpele handeling kan uitvoeren?
Java:
1
| image.getScaledInstance(width, height, scalingSetting); |
Dit rescalen (en er zijn andere dingen die potentieel even kunnen duren, zoals het uitrekenen van de positie van nodes), kan een paar seconden duren op de hoogste setting, gedurende welke tijd de gui unresponsive en 'dirty' is.
Ik zie hiervoor 2 mogelijke oplossingen, die ik beiden zonder succes heb proberen te implementeren. De eerste is door de berekeningen uit te voeren door een SwingWorker (wat niet echt helpt omdat de gui toch pas kan worden hertekend wanneer de operatie klaar is) en de andere is door de gebruiker even een bericht te laten zien en de interface af te dekken. Dit is de methode waar ik meer mee probeer te doen. In zijn meest simpele vorm stel ik me zo voor dat ik twee panels kan gebruiken. Een met mijn user interface en een met een bericht ,"resizing...", op een panel die over het andere panel heen wordt getekend. Een voorbeeld hiervan staat in de post hieronder.
De laatste paar regels zijn daarbij waar het om gaat: Het ene panel wordt invisible gemaakt en de andere visible wanneer het bericht moet worden gezien en vice versa.
Echter, dit werkt niet. Het (rode) contents panel blijft actief. Ook als ik het probeer met een invokeLater(Runnable r) of een invokeAndWait(Runnable r), dingen doe met invalidate(), setComponentZOrder(Component c, int index) of werk met andere layoutmanagers. (ik zal jullie de voorbeelden besparen tbv de postlengte)
Als je echter de tweede aanroep
Java:
niet uitvoert, blijft ie na de resize wel keurig op blauw staan in plaats van rood.1
| showMessage(false); |
Ik ben hier intussen bijna een volledige werkdag (<- stage) mee bezig, terwijl het niet eens een geplande feature was
Wie kan mij vertellen hoe ik deze relatief simpele handeling kan uitvoeren?
[ Voor 34% gewijzigd door SilentStorm op 09-03-2007 15:18 ]
Localhost is where the heart is