Hallo Leute,
Ich frag mich gerade, ob man durch ieine Methode ein String-Array mit allen vorhandenen Font-Schriften ermitteln kann. Es gibt zwar die Standards "SansSerif" (früher "Helvetica"), "Serif" (früher "TimesRoman") und "Monospaced" (früher "Courier") in jedem Java-System, aber man kennt es ja von Word oder auch Paint.Net, dass es viele gibt und man sogar welche hinzufügen kann. Iwo im System gibt es nämlich einen Ordner mit allen Schriftarten. Ich muss das nur iwie ermitteln (???)
Gut, hatte zwar auch gesucht, aber anscheinend warens nicht die richtigen Suchbegriffe ("Java Font Namen", etc.) D
Dankeschön
Konnte leider noch keine Beispiel finden, wo das in ein String[] von den Namen umgewandelt wird. Mein momentaner Code dafür:
Java:
ArrayList<String> list =newArrayList<String>();Font[] fonts =GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();for(Font f : fonts){
list.add(f.getName());}String[] sArray =(String[])list.toArray();
In der letzten Zeile gibt es lieder eine ClassCastException(Object[] zu String[]). Hab im Debugger nachgeschaut. Alle Einträge in Object[] sind String[]. Warum kann er das trotzdem nicht casten und was wäre sonst die Alternative?
warum rufst du denn nicht [c]System.out.println(f.getName());[/c] auf...aber ansonsten könnte man das wie folgt machen:
Java:
ArrayList<String> list =newArrayList<String>();Font[] fonts =GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();for(Font f : fonts){
list.add(f.getName());System.out.println(f.getName());}String[] sArray =newString[list.size()];for(int i =0; i < list.size(); i++){
sArray[i]= list.get(i);}
Danke, es hat also nur bei toArray() in Klammer noch eine Angabe gefehlt. Wozu denn bitteschön System.out.println() ?? Ich will doch nur ein Array haben und das nicht alles in der Konsole stehen haben!
Edit: Die Liste gibt leidern icht nur Arial und ähnliches aus, sondern zu fast jedem Font Arial, Arial Bold, Arial Bold Italic, Arial Italic, etc. Kann ich nicht iwie eine Liste ohne die Kombinationsmöglichkeiten erhalten?
Du könntest jeden einzelnen String splitten (String.split(" ")) und einen neuen String bauen, der alle resultierenden Array-Felder wieder zusammensetzt, bis eins der Schlüsselworte "Bold", "Italic" oder so kommt... Am Ende kickst du dann doppelte Einträge raus!
Ne bessere Lösung sehe ich da nicht...
Upps, habs noch nicht korrigiert. Vorweg: Die selbe Idee hatte ich auch, hab dann einfach nochmal kurz die Methoden von GraphicsEnvironment durchgeschaut und das hier gefunden: