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 MakroDieses Makro ist nicht verfügbar
So sollte es aussehen:
Ungültiges MakroDieses 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
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: | 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
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
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
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:
| 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
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
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 MakroDieses Makro ist nicht verfügbar Windows: Ungültiges MakroDieses 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".
|