ubuntuusers.de

Java Swing Fehldarstellung

Status: Gelöst | Ubuntu-Version: Kubuntu 8.10 (Intrepid Ibex)
Antworten |

sebzap

Anmeldungsdatum:
16. September 2007

Beiträge: 29

Hallo,

ich hab eine kurze Frage betreffs der Darstellung eines Swing-GUI in Kubuntu. Ich arbeite unter Windows mit Eclipse an einem Java-Programm mit Swing-GUI, habe es als executable jar-file exportiert und es läuft soweit auch gut. Wenn ich dieselbe jar-file unter Kubuntu mit

java -jar file.jar

öffne, öffnet sich zwar die GUI, aber alle Schrift (sowohl die JLabels als auch JTextFields) ist um ca. ein viertel nach oben verschoben und oben entsprechend "abgesägt".

Installiert ist das Paket openjdk-6-jre.

So sieht das aus:

Ungültiges Makro

Dieses Makro ist nicht verfügbar

So sollte es aussehen:
Ungültiges Makro

Dieses Makro ist nicht verfügbar

Muss ich irgendwas im Java-Quelltext ändern um Kompatibilität mit Linux zu gewährleisten? Text-Kodierung ist UTF8. Ich hatte zunächst auf setVerticalAlignment(int) getippt, aber anscheinend gibt's das nicht für JLabels.

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Vermutlich liegts an der Schriftart. Du musst dein Programm so programmieren, dass es sich an die Schriftgröße anpasst, nicht umgekehrt. (also keine feste Pixelangaben für Elemente, die Text enthalten)

Edit: Warum benutzt du keine Umlaute? Java hat vollen UTF-16 Support.

sebzap

(Themenstarter)

Anmeldungsdatum:
16. September 2007

Beiträge: 29

Schriftart, hm ist momentan:

1
Font myfont = new Font("SansSerif", 1, 30);

So wie ich das verstehe, steht SansSerif für seriefenlose Schriften, also systemabhängig, gibt's eine Möglichkeit das genauer festzulegen, damit die Schriften und Größen identisch sind?

EDIT: Mir fällt gerade noch auf, dass die Menüleiste in Linux wesentlich breiter ist, alle Schriften etwa auf gleicher Höhe wie in Windows stehen, aber die sie "umschließenden" Elemente (die JTextFields und die (unsichtbaren) JLabels) um etwa die Höhendifferenz der beiden Menüleisten verschoben sind.

sebzap

(Themenstarter)

Anmeldungsdatum:
16. September 2007

Beiträge: 29

stfischr schrieb:

Edit: Warum benutzt du keine Umlaute? Java hat vollen UTF-16 Support.

Hatte vorher Probleme mit Umlauten und sie erstmal alle durch Umschrift ersetzt, später das text-encoding auf utf8 gesetzt und bin dann einfach zu faul gewesen, die Umschriften wieder aufzulösen. ☺

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Du hast die Widgets wohl absolut im Designer platziert, oder? Da sind solche Fehldarstellungen nicht nur wahrscheinlich, sondern sogar zu erwarten. Schreibe das Programm um, so dass es richtiges Layout-Management benutzt!

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

sebzap schrieb:

EDIT: Mir fällt gerade noch auf, dass die Menüleiste in Linux wesentlich breiter ist, alle Schriften etwa auf gleicher Höhe wie in Windows stehen, aber die sie "umschließenden" Elemente (die JTextFields und die (unsichtbaren) JLabels) um etwa die Höhendifferenz der beiden Menüleisten verschoben sind.

Ja das Menü passt sich automatisch der Schriftgröße an (Bei der Schrift scheint ein Mindestabstand nach unten zu existieren), wie es auch der Rest deines Programms tuen sollte.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

Wenn Du die Zahlen 789 und die Buchstaben jpg anschaust, dann siehst Du auch, daß die Buchstaben Unterlängen haben, die in die Windowsfelder gar nicht reinpassen würden - das rechte Layout ist also falsch. ☺

Außerdem sind die Buttons für >>> und <<< zu klein.

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Wenn du unbedingt Symmetrie und Plattformunabhängig brauchst, dann erstell dir Grafiken.

sebzap

(Themenstarter)

Anmeldungsdatum:
16. September 2007

Beiträge: 29

Lunar schrieb:

Du hast die Widgets wohl absolut im Designer platziert, oder? Da sind solche Fehldarstellungen nicht nur wahrscheinlich, sondern sogar zu erwarten. Schreibe das Programm um, so dass es richtiges Layout-Management benutzt!

Ne, hab keinen Grafischen Designer zum Laufen gebracht, deswegen sind die alle mit setBounds(int,int,int,int) auf Größe gebracht und platziert.

Die entsprechenden Zeilen für die Inputfelder:

1
2
3
4
5
6
7
JFormattedTextField[] B;
...
for(int i = 0; i<9; ++i)
{
         B[i].setBounds(10 + (i%3) *40, 10 + (i/3) * 40 ,30,30);
         B[i].setHorizontalAlignment(JFormattedTextField.CENTER);
}

sebzap

(Themenstarter)

Anmeldungsdatum:
16. September 2007

Beiträge: 29

user unknown schrieb:

Wenn Du die Zahlen 789 und die Buchstaben jpg anschaust, dann siehst Du auch, daß die Buchstaben Unterlängen haben, die in die Windowsfelder gar nicht reinpassen würden

Wo finde ich die?

sebzap

(Themenstarter)

Anmeldungsdatum:
16. September 2007

Beiträge: 29

stfischr schrieb:

Wenn du unbedingt Symmetrie und Plattformunabhängig brauchst, dann erstell dir Grafiken.

Naja, nicht direkt Symmetrie, nur vertikal zentrierte Darstellung. Wie mach ich die Grafiken für die JTextFields? Sollen ja beliebig vom User eingegeben werden können.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

sebzap schrieb:

stfischr schrieb:

Wenn du unbedingt Symmetrie und Plattformunabhängig brauchst, dann erstell dir Grafiken.

Naja, nicht direkt Symmetrie, nur vertikal zentrierte Darstellung. Wie mach ich die Grafiken für die JTextFields? Sollen ja beliebig vom User eingegeben werden können.

Der Kommentar war wohl mehr spöttisch gemeint.

sebzap schrieb:

user unknown schrieb:

Wenn Du die Zahlen 789 und die Buchstaben jpg anschaust, dann siehst Du auch, daß die Buchstaben Unterlängen haben, die in die Windowsfelder gar nicht reinpassen würden

Wo finde ich die?

Nun - Du verwendest ja nur Zahlen, und die passen eben so in die JTextFields hinein. Ein j, p oder g würde aber unten abgeschnitten, so knapp wie die Zahlen passen.

sebzap

(Themenstarter)

Anmeldungsdatum:
16. September 2007

Beiträge: 29

user unknown schrieb:

Wo finde ich die?

Nun - Du verwendest ja nur Zahlen, und die passen eben so in die JTextFields hinein. Ein j, p oder g würde aber unten abgeschnitten, so knapp wie die Zahlen passen.

Ah jetzt versteh ich's 😎 Ich hatte missverständlich angenommen, es gäbe Bilddateien im JPG-Format der Zeichen einer Schriftart 😳

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

☺ Ja, sorry, mein Fehler. Ich habe meine Augen über die Seite gleiten lassen, auf der Suche nach Buchstaben mit Unterlängen, und j und p gefunden, und dann auch noch ein g - daß das dann jpg bildet fand ich halbwegs komisch, aber dachte es sei dennoch verständlich. Damit habe ich das Mißverständnis vorprogrammiert. ☺

sebzap

(Themenstarter)

Anmeldungsdatum:
16. September 2007

Beiträge: 29

Auch auf die Gefahr hin, mich als Trottel darzustellen, hier nochmal zwei Screens zum Vergleichs mitsamt Quelltext:

Linux:

Ungültiges Makro

Dieses Makro ist nicht verfügbar

Windows:
Ungültiges Makro

Dieses Makro ist nicht verfügbar

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
text = new JTextArea(
	    		"Eingaben:\n" +
	    		"Ziffern von 1 bis 8\n\n" +
	    		"Lücke:\n" +
	    		"0 oder 9\n\n" +
	    		"Ungültige Eingaben:\n" +
	    		"Mehrere Ziffern in einem Feld\n" +
	    		"Doppelte Eingaben \n" +
	    		"Eingabe sonstiger Zeichen"
	    );
text.setBounds(50, 5, 300, 200);
	    
Font myfont = new Font("SansSerif", 1, 15);
text.setFont(myfont);

So wie ich die bisherigen Antworten auffasse, liegt das Displacement an den zustäzlich zu beachtenden Unterlängen der Zeichen, kann dass denn so extrem wie in den beiden obigen Bildern sein? Ich will in der Textarea einer Ausgabe in quasi Absätzen je Inhalt, bei Linux scheinen fast zusätzliche Leerzeilen dazwischen sein, für Auswirkung der Unterlängen in meinem Verständnis zu krass. Ausserdem kollidiert ja im rechten Bild auch "g" in "Eingaben" nicht mit der Höhe der "f" in "Ziffern".

Antworten |