Chinesische JButtons

Moin,

ich habe ein kleines Swing-Programm. Alle Grafiken und Zeichensätze sind in der JAR enthalten. Darin sind natürlich auch verschiedene Sprachen enthalten.

Solange wie Deutsch/Englisch eingestellt ist, dann passt das:

wenn ich jetzt die Übersetzung für Chinesisch lade, passiert folgendes:

das JButtons Chinesisch können:

		//cancel.setFont(StyleGuide.getFont("font.normal"));

folgende Einschränkungen und Überprüfungen von meiner Seite:
[ul]
[li]Es muss genau dieser Zeichensatz (Ubuntu Condensed) verwendet werden. Dieser Zeichensatz wird im JAR mitgeliefert und wird aus aus den Resourcen geladen (unter Windows geprüft).
[/li][li]verwende ich den Zeichensatz direkt (new Font("Ubuntu Condensed", 0, 18)) sehe ich ebenfalls keine chinesischen Schriftzeichen
[/li][li]der Weg über HTML hat auch nicht funktioniert
[/li][li]die Übersetzungen waren alle UTF-8, Kate und Konsole (Eclipse/Terminal) zeigen entsprechend die chinesischen Schriftzeichen
[/li][li]die Übersetzungen sind inzwischen mit native2ascii konvertiert und werden entsprechend eingelesen, Eclipse zeigt in der Konsole wieder entsprechende Zeichen an
[/li][li]die JLabel zicken entsprechend auch rum
[/li][li]Ubuntu Condensed kann die Schriftzeichen - überprüft mit LibreOffice
[/li][/ul]

wie bekomme ich die ollen Vierecke weg?

danke, mogel

    private static Font loadFont(String fontname) {
        fontname = "/fonts/" + fontname;
        logger.info(" - " + fontname);
        Font f = null;
        try {
            InputStream is = Helper.getResource(fontname);
            f = Font.createFont(Font.TRUETYPE_FONT, is);
            GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();
            genv.registerFont(f);
        } catch(Exception ex) {
            logger.error(ex);
            logger.warn(" => Font konnte nicht registriert werden");
        }
        return f;
    }

Mein Mantra: Fonts sind immer kacke!

In diesem speziellen Fall: Chinesische Fonts sind immer besonders kacke :smiley:

Ganz allgemein bedeuten diese „Kästchen“ ja schlicht, dass das entsprechende Zeichen nicht „im Font enthalten“ ist. Z.B. muss man unter Windows AFAIK explizit den East-Asian-Languages-Support und solche Font-Pakete wie http://www.microsoft.com/china/windows2000/downloads/18030.asp installieren, damit man eine Chance hat, das richtig angezeigt zu bekommen. Viel konkreter kann ich spontan nicht helfen, aber… sicher, dass dieser „Ubuntu Condensed“ die entsprechenden Zeichen überhaupt enthält?

Folgendes funktioniert bei mir unter Windows 8:

	public static void main(String[] args) throws FontFormatException, IOException
	{
		Font font =  new Font("res/Ubuntu-C.ttf", 0, 30);
		
		JFrame frame = new JFrame("Test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLayout(new BorderLayout());
		
		JLabel label = new JLabel("Test \u4E0E");
		label.setFont(font);
		frame.add(label, BorderLayout.CENTER);
		
		JButton button = new JButton("Test2 \u4ECA");
		button.setFont(font);
		button.setPreferredSize(new Dimension(100, 100));
		frame.add(button, BorderLayout.SOUTH);
		
		frame.pack();
		frame.setVisible(true);
	}

EDIT:
Folgendes hingegen funktioniert nicht:
Font font = Font.createFont(Font.TRUETYPE_FONT, new File("res/Ubuntu-C.ttf")).deriveFont(30f);
Teste doch vielleicht mal den simplen Font Konstruktor.

ich konnte das „Problem“ unter J7 auch nach stellen. Werde mal schauen wie sich das bei mir umgehen lässt

danke, mogel

*** Edit ***

Werde es im Hinterkopf behalten, aber wird dann nicht mehr mein Problem sein. Es reicht wenn ich zeige das es bei mir Funktioniert und wo die Probleme sind. Wenn der Kunde des Kunden dann die Paket nicht installiert muss er Englisch nehmen (das die Chinesen aber unbedingt die Sprache haben wollten…)

läd nicht den Zeichensatz von der Festplatte. Java wechselt da anscheinend intern auf den logischen Font „Dialog“. Und der kann Chinesisch.

Font font = new Font("Ubuntu Condensed", 0, 30); liefert wieder die Vierecke. Wenn ich mir den Zeichensatz mit KFontView anschaue, kann der in der Tat kein Chinesisch. Wieso das unter LibreOffice dennoch funktioniert, keine Ahnung. Evt. nehmen die dann für Chinesisch Intern einen anderen Zeichensatz (oder über Font-„Vererbung“).

Ich muss das Problem jetzt erstmal ruhen lassen. Komisch das es auf dem Cupid funktioniert. Wer weis was Garz&Fricke da gemacht hatte damals.