【问题标题】:FXML: Bind TableViews items property to controllerFXML:将 TableViews 项目属性绑定到控制器
【发布时间】:2016-11-27 17:10:07
【问题描述】:

我在FXML 中有一个TableView,我想将它的items 属性绑定到控制器中的一个列表(就像在WPF 中一样),我的FXML 代码是这样的:

<TableView fx:controller="controllers.MyController"  items="$controller.loggings">
    <columns>
        <TableColumn text="Nom">
            <cellValueFactory>
                <PropertyValueFactory property="name" />
            </cellValueFactory>
        </TableColumn>

        <TableColumn text="Type">
            <cellValueFactory>
                <PropertyValueFactory property="type" />
            </cellValueFactory>
        </TableColumn>
    </columns>
</TableView>

而我的控制器如下:

public class MyController {
    public ObservableList<Logging> loggings = FXCollections.observableArrayList();

    @FXML
    protected void initialize(){
        loggings.add(new Logging(){{
            setName("hilton");
            setType("hotel");

        }});
    }
}

由于某种原因,Exception 启动。我做错了什么?

【问题讨论】:

    标签: java javafx binding fxml


    【解决方案1】:

    您尚未声明 fx 命名空间:

    <TableView xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.MyController"  items="$controller.loggings">
        ...
    </TableView>
    

    此外,控制器类需要包含 loggings 字段的 getter:

    private final ObservableList<Logging> loggings = FXCollections.observableArrayList();
    
    public ObservableList<Logging> getLoggings() {
        return loggings;
    }
    

    注意: JavaFX 不考虑表达式绑定的字段,因此需要 getter。

    【讨论】:

      【解决方案2】:

      您的 FXML 文件有误。您必须将项目分配给控制器类中的TableView

      FXML 文件:

      <?xml version="1.0" encoding="UTF-8"?>
      <?import javafx.scene.control.TableView?>
      <?import javafx.scene.control.TableColumn?>
      <?import javafx.scene.control.cell.PropertyValueFactory?>
      
      <TableView xmlns:fx="http://javafx.com/fxml" fx:controller="controllers.MyController" fx:id="tableView">
          <columns>
              <TableColumn text="Nom">
                  <cellValueFactory>
                      <PropertyValueFactory property="name" />
                  </cellValueFactory>
              </TableColumn>
      
              <TableColumn text="Type">
                  <cellValueFactory>
                      <PropertyValueFactory property="type" />
                  </cellValueFactory>
              </TableColumn>
          </columns>
      </TableView>
      

      控制器:

      package controllers;
      
      import javafx.collections.FXCollections;
      import javafx.collections.ObservableList;
      import javafx.fxml.FXML;
      import javafx.scene.control.TableView;
      
      public class MyController {
          @FXML
          private TableView<Logging> tableView;
      
          public ObservableList<Logging> loggings = FXCollections.observableArrayList();
      
          @FXML
          protected void initialize(){
              loggings.add(new Logging(){{
                  setName("hilton");
                  setType("hotel");
      
              }});
      
              tableView.setItems(loggings);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 2013-11-18
        • 2014-02-11
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        相关资源
        最近更新 更多