我正在尝试创建一个非常简单的 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 中没有出现任何字符串。我知道发生了一些事情,因为列中显示了可见的行行,但它们都是空的。
当然还有类似的问题并不真正适用:
所以,我的问题是:
如何使我的 Array 中的字符串在 TableView 中可见?
如何使单列可编辑,以便用户可以添加更多字符串?
预先感谢您的考虑和回应。
首先,您的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)
| 归档时间: |
|
| 查看次数: |
2555 次 |
| 最近记录: |