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

时间:2016-01-02 20:39:18

标签: java javafx

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

String[] acronyms = {"Foo", "Bar"};

documentation假定某些数据类型填充多个列(例如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>

然后我&#34;电线&#34;我控制器内的这些元素:

@FXML private TableView<String> clientAcronymTable;

@FXML private TableColumn<ObservableList<String>, String> clientAcronymColumn;

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

clientAcronymTable.setItems(FXCollections.observableList(acronyms));

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

当然,类似的问题并不适用:

  1. Related to more than one column, not applicable
  2. Creates a custom Row Class which seems like overkill
  3. 所以,我的问题是:

    如何让我的数组中的字符串在TableView 中可见?

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

    提前感谢您的考虑和回应。

1 个答案:

答案 0 :(得分:3)

首先,您的TableColumn类型错误。由于每行包含String(不是ObservableList<String>),因此您需要

@FXML private TableColumn<String, String> clientAcronymColumn;

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

clientAcronymColumn.setCellValueFactory(cellData -> 
    new ReadOnlyStringWrapper(cellData.getValue()));

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

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