如何在Combobox中组合字符串和SVG?

时间:2015-07-21 12:52:53

标签: svg combobox javafx-8

我必须知道如何在组合框内组合字符串和SVG 例如,SVG应位于字符串的末尾,以显示字符串是否已在某处设置 所以已经出现的项目应该是这样的:
“这个字符串已经出现在其他地方”+ mySVG。

如果字符串没有出现在其他地方,则items值就是字符串本身。

显示字符串没问题,我的问题从添加SVG开始。

我的SVG就是这样:

SVGPath mySVG = new SVGPath();
mySVG.setContent("M0,4.2l1.4,-0.3L3,5.7A13,13 0 0,1 7.4,0H8.5A15,15 0 0,0 4,7.2L2.5,7.5Z");

我希望你明白我想做什么。

1 个答案:

答案 0 :(得分:1)

您可以通过将单元格工厂设置为ComboBox

来实现
public class JavaFxTest2 extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        ComboBox<String> comboBox = new ComboBox<>();
        comboBox.getItems().addAll("apple", "banana", "orange");
        comboBox.setCellFactory(l -> new ListCell<String>() {
            private SVGPath mySVG;

            {
                setContentDisplay(ContentDisplay.RIGHT);
                mySVG = new SVGPath();
                mySVG.setContent("M0,4.2l1.4,-0.3L3,5.7A13,13 0 0,1 7.4,0H8.5A15,15 0 0,0 4,7.2L2.5,7.5Z");
            }

            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (!empty) {
                    if ("banana".equals(item)) {
                        setGraphic(mySVG);
                    } else {
                        setGraphic(null);
                    }
                    setText(item);
                } else {
                    setGraphic(null);
                    setText(null);
                }
            }

        });
        primaryStage.setScene(new Scene(comboBox));
        primaryStage.show();
    }

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