【问题标题】:How to define a Column for buttons in FXML (JavaFX)如何在 FXML (JavaFX) 中为按钮定义列
【发布时间】:2014-07-25 17:25:16
【问题描述】:

我知道可以在 TableView 中创建一个填充按钮thanks to jewelsea 的列。

但我想知道是否可以直接在 FXML 中定义

例如,与其他类型一样:

类人

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");

如何用Buttons实现同样的效果?

【问题讨论】:

  • 这在 Scene Builder 中是不可能的。
  • 我认为这是不可能的。你必须在你的代码上设置 Cell Factory。

标签: java javafx javafx-2 javafx-8 fxml


【解决方案1】:

不,你不可能用代码初始化它

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();
    }

});

【讨论】:

    【解决方案2】:

    由于需要单元工厂,因此无法在 FXML 中的表格列中添加按钮。

    您可以像 Jewelsea 那样使用 Java 代码来实现。

    【讨论】:

      猜你喜欢
      • 2016-03-25
      • 2015-07-21
      • 2017-06-21
      • 2020-06-26
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      相关资源
      最近更新 更多