用于选择线条样式的 JavaFX 组合框

标签 java javafx-2

我已经自定义了一个组合框来在选择列表中显示线型,但该按钮仅显示文本。如何在按钮中绘制选定的线型。

ComboBox<String> cmb = new ComboBox<String>();
cmb.getItems().addAll("-fx-stroke-dash-array: 12 2 4 2;", "-fx-stroke-dash-array: 2 2;");
cmb.setCellFactory(new Callback<ListView<String>, ListCell<String>>()
    {
        @Override public ListCell<String> call(ListView<String> p)
        {
            return new ListCell<String>()
                {
                    private final Group group;
                    private final Line line;
                    { 
                        setContentDisplay(ContentDisplay.GRAPHIC_ONLY); 
                        group = new Group();
                        group.getChildren().add(new Rectangle(100, 30, Color.WHITE));
                        line = new Line(0, 15, 100, 15);
                        group.getChildren().add(line);
                    }

                    @Override protected void updateItem(String style, boolean empty)
                    {
                        super.updateItem(style, empty);
                        if(style != null && !empty)
                        {
                            line.setStyle(style);
                            setGraphic(group);
                        }
                    }
                };
        }
    });

它的渲染方式如下: JavaFX custom combobox

我想显示选定的线条示例,而不是样式文本“-fx-lines...”,我该如何解决这个问题?

在选择列表中,行的左侧总是有一个额外的空格,可以去掉这个空格吗?

最佳答案

JavaFX 的工作方式与 Swing 不同,它会缓存 CellFactory 创建的节点,并且仅相应地更新它们,而不是使用它们进行渲染并丢弃它们(这就是为什么您必须实现 updateItem)。 JFX 类将使用一个节点(或“单元格”)作为所谓的按钮单元格,它只是为您显示文本。基本上,您必须调用 cmd.setButtonCell(myCellFactory.call(null)); 。这会将您的自定义单元格之一安装为按钮单元格,并且组合框将自动使用适当的值更新它。

关于用于选择线条样式的 JavaFX 组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166227/

相关文章:

java - Java Web Start 应用程序启动缓慢

java - 在 JavaFX2 中的图片顶部绘制矩形

java - 网格 Pane 可以自动调整其对象的大小以适合吗?尝试将 max_width 和 max_height 设置为网格并让它调整内容大小。 JavaFX

transactions - 具有事务支持的 JavaFX TableView

java - 当我完成结果的 Activity 时调用 OnCreate 和 onActivityResult

java - 具有继承的泛型

java - 使用 JFileChooser 允许 Swing 用户指定输出位置

java - !strcmp(语言环境, “C”):Error:Assert failed:in file baseapi.cpp, line 209

java - 在 JavaFX 图表中添加一条线

include - JavaFX 场景生成器和 fx :include