在javaFX中填充一个简单的TableColumn
我正在试验在JavaFXTableColumn中显示字符串的ArrayList。我已经阅读了许多关于显示和动态修改自定义类等的详细示例,但我只想看到显示arraylist数据的列的基本实现。 我尝试过各种方法,包括使用观察者,但我的兴趣远不止这些 非常感谢您的建议 这是我的密码: 主要内容: 控制器:在javaFX中填充一个简单的TableColumn,java,javafx,Java,Javafx,我正在试验在JavaFXTableColumn中显示字符串的ArrayList。我已经阅读了许多关于显示和动态修改自定义类等的详细示例,但我只想看到显示arraylist数据的列的基本实现。 我尝试过各种方法,包括使用观察者,但我的兴趣远不止这些 非常感谢您的建议 这是我的密码: 主要内容: 控制器: package testCram; import javafx.beans.property.ReadOnlyStringWrapper; import javafx.fxml.FXML; im
package testCram;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import java.util.*;
public class Controller {
//instances of all controls
@FXML
public TableView<String> table;
@FXML
public TableColumn<String , String> column1;
public void setData(){
Collection<String> list = new ArrayList<>();
list.add("String1");
list.add("String2");
list.add("String3");
list.add("String4");
list.add("String5");
list.add("String6");
//I understand that you need to use 'setCellValueFactory' but I don't see what is needed to extract the values from list.
column1.setCellValueFactory(cellData ->
new ReadOnlyStringWrapper(cellData.getValue()));
}
}
packagetestcram;
导入javafx.beans.property.ReadOnlyStringWrapper;
导入javafx.fxml.fxml;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入java.util.*;
公共类控制器{
//所有控件的实例
@FXML
公共表视图表;
@FXML
公共表格第1栏;
public void setData(){
集合列表=新的ArrayList();
列表。添加(“String1”);
列表。添加(“String2”);
列表。添加(“第3条”);
列表。添加(“第4条”);
列表。添加(“第5条”);
列表。添加(“第6条”);
//我知道您需要使用“setCellValueFactory”,但我不知道从列表中提取值需要什么。
列1.setCellValueFactory(cellData->
新的ReadOnlyStringWrapper(cellData.getValue());
}
}
FXML:
我进一步研究了这个问题,我将发布我自己的答案: 为了使列分解数据,必须指示表填充数据: 添加行: table.getItems().addAll(列表) 在 列1.setCellValueFactory(cellData-> 新的ReadOnlyStringWrapper(cellData.getValue())
我希望这能帮助其他陷入困境的人。A
TableColumn
必须有一个非空属性。如果您对TableColumn
的责任有错误的假设,那么这是违反直觉的。它告诉TableView
如何将行项目转换为observeValue
,该值包含通过其cellValueFactory
显示的数据。不同意,没有什么不直观的:表包含数据对象列表,每列显示该数据对象的一个属性。因此有两件事要做:a)告诉表要包含哪些数据列表(通过setItems/addItem)和b)告诉列要显示哪些属性(通过cellValueFactory)。学习关于fx的任意基础教程可能会有所帮助——只是说;)
package testCram;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import java.util.*;
public class Controller {
//instances of all controls
@FXML
public TableView<String> table;
@FXML
public TableColumn<String , String> column1;
public void setData(){
Collection<String> list = new ArrayList<>();
list.add("String1");
list.add("String2");
list.add("String3");
list.add("String4");
list.add("String5");
list.add("String6");
//I understand that you need to use 'setCellValueFactory' but I don't see what is needed to extract the values from list.
column1.setCellValueFactory(cellData ->
new ReadOnlyStringWrapper(cellData.getValue()));
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.RowConstraints?>
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="- Infinity" minWidth="-Infinity" prefHeight="718.0" prefWidth="569.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="testCram.Controller">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Pane prefHeight="718.0" prefWidth="596.0">
<children>
<TableView fx:id="table" layoutX="75.0" layoutY="99.0" prefHeight="200.0" prefWidth="399.0">
<columns>
<TableColumn fx:id="column1" prefWidth="100.0" text="String" />
</columns>
</TableView>
</children></Pane>
</children>
</GridPane>