L
lupylucke
Gast
Die Situation:
in meinem Java-Programm habe ich einen "Begrüssungs-screen", in dem ein Hintergrundbild und zwei JButtons zu sehen sind. Das ganze wird mit einer Klasse die JPanel erweitert und paintComponent() gemacht. Die Buttons sollten sich an einer bestimmten Stelle "im" Bild befinden (horizontal zentriert, vertikal etwas unter der Mitte). Das soll auch so bleiben wenn der User das Fenster vergrössert oder verkleintert.
Ich habe das folgendermassen gemacht:
- als LayoutManager wird BoxLayout mit dem Parameter Y_AXIS verwendet (die Buttons sollen übereinander sein und werden damit horizontal zentriert)
- im JPanel wird zuerst ein Box.Filler eingefügt, danach die zwei Buttons:
- die Methode paintComponent() sieht dann etwa so aus:
Das ganze funktioniert auch ganz gut - zumindest under Linux oder Windows mit jre 1.6.
Das Problem:
under Windows, mit jre 1.4 oder 1.5, befinden sich die Buttons nicht immer wo erwünscht. Beim Start kleben sie zuerst mal zuoberst im Fenster, soblad man aber irgendwo hinklickt "springen" sie an die richtige Stelle. Wenn man dann das Fenster vergrössert oder verkleinert kann es vorkommen dass sie nach oben oder nach unter verschoben sind; auch in diesem Fall genügt ein Mausklick irgendwo auf das Bild, und sie gehen an die richtige Stelle zurück.
Wie gesagt, under Linux besteht das Problem mit allen drei jre-Versionen(1.4-1.6) nicht, under Windows funktioniert's mit 1.6 ebenfalls wie gewünscht.
Ist das ein Bug in java, oder habe ich irgendwas übersehen?
Irgendwelche Tipps? - Nein auf java 1.6 updaten geht leider nicht. Das Programm sollte nämlich unter anderem an unserer Schule angewendet werden, da sind sie noch bei 1.5 (fragt mich nicht wieso....) und ich glaube nicht, dass die gewillt sind, meinetwegen auf über 50 Maschinen ein neues jre zu installieren...
Danke im Voraus
Simon
in meinem Java-Programm habe ich einen "Begrüssungs-screen", in dem ein Hintergrundbild und zwei JButtons zu sehen sind. Das ganze wird mit einer Klasse die JPanel erweitert und paintComponent() gemacht. Die Buttons sollten sich an einer bestimmten Stelle "im" Bild befinden (horizontal zentriert, vertikal etwas unter der Mitte). Das soll auch so bleiben wenn der User das Fenster vergrössert oder verkleintert.
Ich habe das folgendermassen gemacht:
- als LayoutManager wird BoxLayout mit dem Parameter Y_AXIS verwendet (die Buttons sollen übereinander sein und werden damit horizontal zentriert)
- im JPanel wird zuerst ein Box.Filler eingefügt, danach die zwei Buttons:
Code:
filler = new Box.Filler(null, null, null); //filler ist ein private field
this.add(filler);
this.add(button1);
this.add(button2);
Code:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//zeichne das Bild
...
//passe die Grösse von filler der Grösse des JPanel an
Dimension top = new Dimension(60, (int)(this.getSize().getHeight()*Y_OFFSET));
//Y_OFFSET (double) ist die relative position der Buttons, z.B. 0.6
filler.changeShape(top, top, top);
}
Das Problem:
under Windows, mit jre 1.4 oder 1.5, befinden sich die Buttons nicht immer wo erwünscht. Beim Start kleben sie zuerst mal zuoberst im Fenster, soblad man aber irgendwo hinklickt "springen" sie an die richtige Stelle. Wenn man dann das Fenster vergrössert oder verkleinert kann es vorkommen dass sie nach oben oder nach unter verschoben sind; auch in diesem Fall genügt ein Mausklick irgendwo auf das Bild, und sie gehen an die richtige Stelle zurück.
Wie gesagt, under Linux besteht das Problem mit allen drei jre-Versionen(1.4-1.6) nicht, under Windows funktioniert's mit 1.6 ebenfalls wie gewünscht.
Ist das ein Bug in java, oder habe ich irgendwas übersehen?
Irgendwelche Tipps? - Nein auf java 1.6 updaten geht leider nicht. Das Programm sollte nämlich unter anderem an unserer Schule angewendet werden, da sind sie noch bei 1.5 (fragt mich nicht wieso....) und ich glaube nicht, dass die gewillt sind, meinetwegen auf über 50 Maschinen ein neues jre zu installieren...
Danke im Voraus
Simon