linux下javafx应用里部分字体部分汉字方框的的缺陷解决

刚开始整了一个很简单javafx应用,在一台机器正常,换了一台机器,界面上部分汉字显示方框。

private static GraphicsEnvironment environment;
    @Override
    public void start(Stage primaryStage) throws Exception{
        URL location = getClass().getResource("/changeFile.fxml");
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(location);
        fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
        Parent root = fxmlLoader.load();
        ChangeFile cf=(ChangeFile )fxmlLoader.getController();
        cf.Init();
        //如果使用 Parent root = FXMLLoader.load(...) 静态读取方法,无法获取到Controller的实例对象
        //Parent root = FXMLLoader.load(getClass().getResource("/changeFile.fxml"));
        Scene scene=new Scene(root, 600, 400);
        KeyCombination kc1 = new KeyCodeCombination(KeyCode.X, KeyCombination.ALT_DOWN);;
        //其实还是当前线程执行
        scene.getAccelerators().put(kc1, () -> System.exit(0));
        environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fonts = environment.getAvailableFontFamilyNames();//获得系统字体
        int k=0;
        for(int i = 0;i<fonts.length;i++){
            if(fonts[i].startsWith("Source Han")){
                k=2;
            }
            if(fonts[i].startsWith("Alibaba ")){
                k=1;
            }            
        }        
        if(1==k) {
            scene.getStylesheets().add(getClass().getResource("/MainStyle.css").toExternalForm());
        }else{
            scene.getStylesheets().add(getClass().getResource("/MainStyle2.css").toExternalForm());
        }
        //设置左上角小图标 注意 不支持ico格式
        primaryStage.getIcons().add(new Image("/logo.png"));
        primaryStage.setTitle("Hello HarmonyOS");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

因为controller里的java代码用到相应文字正常,就把controller那出外面调用一下init方法,重新设置界面显示文字,结果还不行

比较了2台机器字体,发现缺陷的字体是思源宋体 思源黑体,把免费的阿里普惠体复制到相应机器css文件里设置阿里字体就正常

于是加了代码判断下系统字体,有什么字体用相应css样式文件

再后来,网上搜索一番,是java对思源字体的显示有缺陷,然后把思源字体复制一份到jdk字体文件夹(jdk1.8.0_181/jre/lib/fonts)下,显示就正常了

顺便记一下linux下字体手动复制到/usr/share/fonts下后执行的几个命令

mkfontscale
mkfontdir
fc-cache -fv
fc-list :lang=zh

再记几个免费字体名字,R代表普通规则 B是粗体

阿里普惠体  Alibaba PuHuiTi R        
 思源宋体   Source Han Serif 
oppo字体 OPPOSans R
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值