tik*_*end 5 java javafx tableview
我想在JavaFX TableView中向列中插入两个单独的数据集.基本上我有2个带有字符串的LinkedLists,我想把一个列表放在一列中,另一个列表放在第二列中.
最简单的方法是什么?或者是另一个更好的JavaFX元素?
到目前为止我找到的解决方案只基于插入行的集合,这不是我想要做的.
Jam*_*s_D 10
我强烈建议您重新组织数据,以便拥有一个包含两个属性的类,其中一个是第一个列表中的元素,另一个是第二个列表中的相应元素.然后,您可以创建该类的对象列表,并缩减为通常情况.
比如假设你有
// your first list:
List<Integer> intList = ... ;
// your second list:
List<String> stringList = ... ;
Run Code Online (Sandbox Code Playgroud)
然后定义
public class MyDataType {
private final int intValue ;
private final String stringValue ;
public MyDataType(int intValue, String stringValue) {
this.intValue = intValue ;
this.stringValue = stringValue ;
}
public int getIntValue() {
return intValue ;
}
public String getStringValue() {
return stringValue ;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以做到
TableView<MyDataType> table = new TableView<>();
for (int i = 0; i < intList.size() && i < stringList.size(); i++) {
table.getItems().add(new MyDataType(intList.get(i), stringList.get(i)));
}
Run Code Online (Sandbox Code Playgroud)
并以通常的方式定义列.
如果由于某种原因确实无法进行数据转换,那么您可以将表的类型视为整数,每行的值是两个列表的索引.使用0, 1,...最大为列表大小的值填充表.这看起来像:
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyIntegerWrapper;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class TableViewByColumns extends Application {
@Override
public void start(Stage primaryStage) {
List<Integer> intValues = Arrays.asList(1, 2, 3, 4, 5);
List<String> stringValues = Arrays.asList("One", "Two", "Three", "Four", "Five");
TableView<Integer> table = new TableView<>();
for (int i = 0; i < intValues.size() && i < stringValues.size(); i++) {
table.getItems().add(i);
}
TableColumn<Integer, Number> intColumn = new TableColumn<>("Value");
intColumn.setCellValueFactory(cellData -> {
Integer rowIndex = cellData.getValue();
return new ReadOnlyIntegerWrapper(intValues.get(rowIndex));
});
TableColumn<Integer, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(cellData -> {
Integer rowIndex = cellData.getValue();
return new ReadOnlyStringWrapper(stringValues.get(rowIndex));
});
table.getColumns().add(intColumn);
table.getColumns().add(nameColumn);
primaryStage.setScene(new Scene(new BorderPane(table), 600, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)