如何在FXML(JavaFX)中为按钮定义列

5
我知道可以在TableView中创建一个填充有按钮的列,感谢jewelsea。但是我想知道是否可以直接在FXML中定义它。
作为示例,对于其他类型,我们可以这样做:
类Person:
private final SimpleStringProperty birthDate = new SimpleStringProperty("");

接下来在FXML文件中:

    <TableView fx:id="table" layoutY="50.0" prefHeight="350.0" prefWidth="600.0">
      <columns>
        <TableColumn prefWidth="79.5" text="date of birth">
            <cellValueFactory>
               <PropertyValueFactory property="birthDate" />
            </cellValueFactory>
        </TableColumn>
      </columns>
    </TableView>

可以使用以下方法添加此元素:

@FXML private TableView<Person> table;
//...
table.getItems().add("12/02/1452");

如何使用按钮实现相同的效果?

在Scene Builder中不可能实现。 - j will
我认为这是不可能的。 你必须在你的代码上设置单元格工厂。 - Marcel
2个回答

0

不可能,你必须使用代码进行初始化。

class ButtonListCell extends ListCell<MyObject> {
    @Override
    public void updateItem(MyObject obj, boolean empty) {
        super.updateItem(obj, empty);
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            setText(obj.toString());

            Button butt = new Button();
            butt.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    System.out.println("clicked");
                }                            
            });
            setGraphic(butt);
        }
    }
}

listview.setCellFactory(new Callback<ListView<MyObject>, ListCell>() {
    @Override
    public ListCell call(ListView<MyObject> param) {
        return new ButtonListCell();
    }

});

-1

在FXML中无法向表列添加按钮,因为需要单元格工厂。

您可以像jewelsea一样使用Java代码来实现它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接