我正在尝试创建一个非常简单的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中没有出现任何字符串。我知道发生了某事,因为列中显示了可见的行行,但它们都是空的。
当然,类似的问题并不适用:
所以,我的问题是:
如何让我的数组中的字符串在TableView 中可见?
如何使单列可编辑,以便用户可以添加更多字符串?
提前感谢您的考虑和回应。
答案 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();
});