ubuntuusers.de

Java GTK+ Look&Feel +SystemFont

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

DrGibble

Avatar von DrGibble

Anmeldungsdatum:
28. April 2005

Beiträge: 62

Wohnort: Bocholt

Hallo miteinander,

ich schreibe gerade meine Diplomarbeit unter Linux in Java und bin auf ein kleines Problem gestoßen welches ich nicht nachvollziehen kann. Nach einiger Recherche im Netz habe ich nun erfahren, dass das GTK+ Look&Feel keine eigene Fontklasse beinhaltet und somit auf die im System von Linux eingestellten Fonts zurückgreift.

In meinem JavaProgramm wird die Schriftart "DejaVu Sans 13" verwendet. Unter Linux habe ich aber unter "System-Einstellungen-Erscheinungsbild-Schriftarten" die Schriftart "Sans 10" eingestellt.

Woher nimmt Java die andere Schriftart? Ich würde das gerne im System umstellen da mir 13 viel zu gross ist.

Anmerkung:

Ich nutze Ubuntu 8.04 (Gnome) mit allen aktuellen Updates, schreibe mein Programm unter Netbeans 6.1 und habe die aktuelle Java JDK 1.6.0_10

Mein geschriebenes JavaProgramm ist so eingestellt, das er sich die aktuelle Schriftart dynamisch aus dem System holt (xyzLabel.getFont()) da man das Look&Feel sowie die Schriftart im System verändern kann und somit keine fixen Schriftarten verwendet werden können.

Für jede Art von Hilfe bin ich sehr Dankbar.

Gruß Boris

Bratwurstler

Avatar von Bratwurstler

Anmeldungsdatum:
14. Oktober 2007

Beiträge: 146

Wohnort: Berlin

In der Theorie müsste man diese Informationen ja von Gnome bzw. XFCE & co holen. Ich kenn mich leider nicht ausreichend mit gtk aus, als dass ich dir umgebungseinstellungsholende Funktionen nennen könnte. 😀

Jens

Strike

Avatar von Strike

Anmeldungsdatum:
27. Oktober 2005

Beiträge: 213

Swing? Hast du dann das L&F auch auf System umgestellt?

Hm, ich hab noch nie wirklich auf die Schriftart geachtet O_o Müsste ich bei gelegenheit mal ausprobieren, obwohl das mit OpenJDK alles ein bisschen komisch aussieht 😉

DrGibble

(Themenstarter)
Avatar von DrGibble

Anmeldungsdatum:
28. April 2005

Beiträge: 62

Wohnort: Bocholt

Ja die GUI's sind mit Swing erstellt und ich benutze (wie oben beschrieben) das GTK+ Look&Feel. Das ist das Systemeigene für Linux.

Ich habe gerade noch die fehlende .gtkrc im Homeverzeichnis laut Wiki "GTK 1 Schriften verbessern" erstellt aber daran lag es auch nicht. Laut aktuellem Java Look&Feel wird ja auch GTK+ (GTK 2.0) verwendet.

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Verstehe ich richtig, dass du nur möchtest, dass das Javaprog aussieht wie ein systemeigenes Prog? Dann solltest du dich mal mit SWT beschäftigen.

DrGibble

(Themenstarter)
Avatar von DrGibble

Anmeldungsdatum:
28. April 2005

Beiträge: 62

Wohnort: Bocholt

Nein, es geht mir ausschliesslich um die in Java eingelesene Systemschriftart die ich nicht nachvollziehen kann woher sie kommt.

Das Programm selbst muss plattformunabhängig laufen und somit unter Linux, Windoof & Mac OSX funktionieren. Daher habe ich mich für Swing entschieden.

Damit aber jeder sein eigenes Look&Feel sowie die Schriftart selbst bestimmen soll gibt es in meinem Programm die Möglichkeit diese beiden Werte dynamisch zu ändern. Allerdings lässt das GTK+ Look&Feel dank fehlender UIFontManager Klasse keine Änderung der Schriftart über Java zu. Es zeigt mir allerding in der GUI an das es zur Laufzeit die "DejaVu Sans 13" Schriftart verwendet. Diese habe ich aber im Erscheinungsbild von Gnome nicht stehen (siehe erster Post).

In einem anderen Forum steht das bei ausgewähltem GTK+ Look&Feel die Systemschriftart von Linux verwendet wird. Nur woher wird sie gelesen? Da mein ganzes System ja "Sans 10" verwendet (nur Javaprogramme nicht) muss es ja irgendwo im System noch eine weitere Einstellungsmöglichkeit für Schriftarten geben.

Strike

Avatar von Strike

Anmeldungsdatum:
27. Oktober 2005

Beiträge: 213

stfischr schrieb:

Verstehe ich richtig, dass du nur möchtest, dass das Javaprog aussieht wie ein systemeigenes Prog? Dann solltest du dich mal mit SWT beschäftigen.

Nö, Swing kann genauso das Systemthema annehmen.

Extra für dich hab ich das nochmal getestet, und zwar folgender Quellcode:

import java.awt.BorderLayout;



import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;





public class TEST {



	/**

	 * @param args

	 * @throws UnsupportedLookAndFeelException 

	 * @throws IllegalAccessException 

	 * @throws InstantiationException 

	 * @throws ClassNotFoundException 

	 */

	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {

		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

		JFrame f = new JFrame("Test^^");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		f.setSize(800, 600);

		f.setLocationRelativeTo(null);

		JButton b = new JButton("Font Test - abcdef91235");

		f.setLayout(new BorderLayout());

		f.add(b, BorderLayout.CENTER);

		

		f.setVisible(true);

		

	}



}

(Ob das jetzt "schöner" Code ist, sei mal dahingestellt^^)

Gibt bei mir folgendes aus: http://schnitter.bplaced.net/screen1.jpg Wobei ich natürlich nur kurz zum Gucken die Schrift umgestellt habe ☺

Funktioniert also eigentlich recht gut 😉

(Ansonsten versteh ich dein Problem leider immer noch nicht, sry)

DejaVu 13 ist imho einfach die Swing-Standard-Schrift im OpenJDK(das du nutzt, oder?^^).

MfG

DrGibble

(Themenstarter)
Avatar von DrGibble

Anmeldungsdatum:
28. April 2005

Beiträge: 62

Wohnort: Bocholt

so, zur Verdeutlichung habe ich Deinem Quelltext die drei println-Methoden angehangen:

System.out.println("Look&Feel: " +UIManager.getLookAndFeel().getName());
System.out.println("Button FontFamily: " +b.getFont().getFamily());
System.out.println("Button FontSize:   " +b.getFont().getSize());

Hier das Ergebnis: http://www.stud.fh-dortmund.de/~boris.dobrowolski/Bildschirmfoto.jpg

Das Bild zeigt wie oben schon beschrieben die Einstellung meiner Fonts und die komplett andere genutzte unter Java (siehe Consolenausgabe Netbeans)

DejaVu 13 ist imho einfach die Swing-Standard-Schrift im OpenJDK(das du nutzt, oder?^^).

Ich nutze die Sun JDK 1.6.0_10 ... nicht die OpenJDK. Kann man denn für Java eine eigene Swing-Standard-Schrift einstellen und wenn ja? wo?

Strike

Avatar von Strike

Anmeldungsdatum:
27. Oktober 2005

Beiträge: 213

Okay, anscheinend(http://de.wikipedia.org/wiki/DejaVu) ist dejavu eben einfach ne Sammlung an Schriften. Jetzt denke ich einfach mal, dass die Schriftart tatsächlich "DejaVu Sans" heißt, Ubuntu die aber zur Vereinfachung als "Sans" anzeigt. (Wie gesagt - nur ne Vermutung 😉)

Und wenn man sich alle Schriften per java ausgeben lässt, steht auch nur ein "DejaVu Sans" drin, Zu der Größe denk ich einfach mal, dass Gnome das in pixeln angibt, java aber in "1/72 of an inch units".

So, ich wäre dann mit meinen Vermutungen fertig ^^ MfG

Ich nutze die Sun JDK 1.6.0_10 ... nicht die OpenJDK. Kann man denn für Java eine eigene Swing-Standard-Schrift einstellen und wenn ja? wo?

Keine Ahnung :/ Aber man kann per UIManager die Schriftarten der einzelnen Komponenten setzen, soviel hab ich vorhin schon gelesen(nach irgendwas hab ich da gegoogelt^^).

DrGibble

(Themenstarter)
Avatar von DrGibble

Anmeldungsdatum:
28. April 2005

Beiträge: 62

Wohnort: Bocholt

Was mir gerade auffällt ... Ich wollte mal für eine genauere Unterscheidung das gesamte Systemschriftbild umstellen. Dazu habe ich im Gnome Erscheinungsbild sämtlich Schriftarten auf "UnPilgi 16" umgestellt welches Deiner Handschrift sehr ähnelt. Alle Schriftarten wurden umgestellt doch zeigt dies bei den Menüleisten keine Wirkung. (Anwendungen, Orte, System und die Menüleisten von Programmen wie Datei, Bearbeiten etc.) Dort ist noch alles beim alten.

Firefox hat seine Menüleisten allerding angegelichen. Kann es sein das genau hier der Hund begraben liegt? Der JButton aus der Testanwendung hat die neue Schrift auch nicht angenommen?!?

Nochmals ein weiterer Screenshot zur Verdeutlichung: http://www.stud.fh-dortmund.de/~boris.dobrowolski/Bildschirmfoto1.jpg

Strike

Avatar von Strike

Anmeldungsdatum:
27. Oktober 2005

Beiträge: 213

Hast du das Programm denn nach dem Schriftwechsel nochmal gestartet? Denke nicht, dass das einfach so umgestellt wird.

Zu den Menüleisten: wird bei mir umgestellt(von Sans in Sans Bold Italic) O_o

DrGibble

(Themenstarter)
Avatar von DrGibble

Anmeldungsdatum:
28. April 2005

Beiträge: 62

Wohnort: Bocholt

Programme wurden neu gestartet, Systemneustart ...

Sogar ein "dpkg-reconfigure fontconfig" (man kann ja nie wissen) hat nichts gebracht. Die Schrift der Menüleisten lässt sich bei mir nicht ändern.

Daher wahrscheinlich auch der vermeidliche Fehler in Java.

Antworten |