在Choice Box中列出所有可用的系统字体

时间:2016-04-07 17:13:56

标签: java javafx-8

我有一个带有选择框的场景。目的是让所有可用的系统字体显示在选择框中,我觉得我走在正确的道路上,因为到目前为止我已经设法在选择框中显示1,但为什么只有1?

这是代码 -

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.SingleSelectionModel;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;

public class ChoiceBoxFonts extends Application
{
   ObservableList<String> fontType;
   ChoiceBox<String> fonts;

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

    public void start(Stage primaryStage) 
    {
        Pane root = new Pane();

        Font.getFamilies().stream().forEach(i ->{
            fontType =
                      FXCollections.observableArrayList(i 
                              );
        });

        // New choicebox with observable arraylist fontType
        fonts =  new ChoiceBox<String> (fontType);

        //SingleSelectionModel<String> selMod = fonts.getSelectionModel();

        root.getChildren().add(fonts);
        Scene scene = new Scene(root,200,200);
        primaryStage.setScene(scene);
        primaryStage.show();

    }
}

实验的目标是能够从选择框中选择一种字体,并使用该选择更改文本对象的字体。

此外,是否有更好的用户界面可以做这样的事情?如果有一堆桶的字体,那个选择框就会很长!

1 个答案:

答案 0 :(得分:2)

你只需要

fontType = FXCollections.observableArrayList(Font.getFamilies());

而不是你的迭代。

  

如果有一大堆字体,那个选择框会很长!

我可能会考虑ListView