*基本*单字符串列的JavaFX TableView

Ram*_*gil 2 java javafx

我正在尝试创建一个非常简单的 JavaFX TableView:1 列字符串。我有一个我想可视化的数组:

String[] acronyms = {"Foo", "Bar"};
Run Code Online (Sandbox Code Playgroud)

文档假定某种数据类型来填充多个列(例如 Person、Book 等)。我会比那更“你好世界”:只显示一个字符串数组。

使用场景构建器,我创建了一个带有表和列的 fxml 文件:

<TableView fx:id="clientAcronymTable" prefHeight="200.0" prefWidth="200.0">
 <columns>
  <TableColumn fx:id="clientAcronymColumn" prefWidth="199.0" text="Client Acronyms" />
 </columns>
  <columnResizePolicy>
     <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
  </columnResizePolicy>
</TableView>
Run Code Online (Sandbox Code Playgroud)

然后我将这些元素“连线”到我的控制器中:

@FXML private TableView<String> clientAcronymTable;

@FXML private TableColumn<ObservableList<String>, String> clientAcronymColumn;
Run Code Online (Sandbox Code Playgroud)

在我的Initializable::initialize方法中,我有:

clientAcronymTable.setItems(FXCollections.observableList(acronyms));
Run Code Online (Sandbox Code Playgroud)

但是,GUI 中没有出现任何字符串。我知道发生了一些事情,因为列中显示了可见的行行,但它们都是空的。

当然还有类似的问题并不真正适用:

  1. 与不止一栏相关,不适用
  2. 创建一个自定义行类,这似乎有点矫枉过正

所以,我的问题是:

如何使我的 Array 中的字符串在 TableView 中可见

如何使单列可编辑,以便用户可以添加更多字符串

预先感谢您的考虑和回应。

Jam*_*s_D 5

首先,您的TableColumn. 由于每一行包含一个String(不是一个ObservableList<String>),你需要

@FXML private TableColumn<String, String> clientAcronymColumn;
Run Code Online (Sandbox Code Playgroud)

然后你需要一个cellValueFactory,它告诉列中的每个单元格如何从行中获取它显示的值:

clientAcronymColumn.setCellValueFactory(cellData -> 
    new ReadOnlyStringWrapper(cellData.getValue()));
Run Code Online (Sandbox Code Playgroud)

至于添加更多字符串,您通常会有一个外部文本字段供用户提供更多:

// you can of course define the text field in FXML if you prefer...
TextField newAcronymTextField = new TextField();

newAcronymTextField.setOnAction(e -> {
    clientAcronymTable.getItems().add(newAcronymTextField.getText());
    newAcronymTextField.clear();
});
Run Code Online (Sandbox Code Playgroud)