在JavaFX中显示复杂的指示Bangla字体

时间:2012-11-02 12:47:50

标签: java fonts javafx-2 javafx indic

在我的程序中,我正在从UTF-8文件中读取一个Bangla(印度语)文本并显示在JavaFx的Text组件中。虽然正在显示字符,但它们的位置不正确。

在这种类型的复杂脚本语言中,一些元音应该在左侧和右侧包围字母,但在某些计算机中它以错误的方式显示,即首先是元音,然后是字母。

e.g。包含“拆分元音”words的单词无法正确显示。 https://bug686225.bugzilla.mozilla.org/attachment.cgi?id=559780

在系统中,它使用http://www.tariquemahmud.net/?p=35修复,但在JavaFx程序中,问题仍然存在。

显示错误 Wrong display

纠正Deisplay Correct Deisplay

根据计算机上面的屏幕截图,您可以检查以下可执行文件是否正确或错误

http://dl.dropbox.com/u/655237/share/BanglaTest.zip

我正在使用以下代码

package banglatest;

import java.io.File;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.util.Scanner;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class BanglaTest extends Application {

    @Override
    public void start(Stage primaryStage) throws MalformedURLException {
        Text text = new Text();
        File file = new File("data.txt");
        StringBuffer sb = new StringBuffer();
        try {
            Scanner scanner = new Scanner(file,"UTF-8");
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                sb = sb.append(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        text.setText(sb.toString());
        Font font = Font.loadFont(new File("bangla.ttf").toURL().toExternalForm(), 20);
        text.setFont(font);
        StackPane root = new StackPane();
        root.getChildren().add(text);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

1 个答案:

答案 0 :(得分:1)

最后,这种支持来自JDK 8(FX 8)。 使用相同的开发人员预览进行重新编译,并且工作正常。