gpt4 book ai didi

java - 向列添加数据的简单方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:28 25 4
gpt4 key购买 nike

我想将两个单独的数据集插入到 JavaFX TableView 的列中。基本上我有 2 个带字符串的链表,我想将一个列表放在一列中,将另一个列表放在第二列中。

最简单的方法是什么?还是另一个 JavaFX 元素更适合这个?

目前我找到的解决方案都是基于插入行的集合,这不是我想要做的。

最佳答案

我强烈建议重新组织您的数据,以便您拥有一个具有两个属性的类,其中一个是第一个列表中的元素,另一个是第二个列表中的相应元素。然后你可以列出那个类的对象,你就减少到通常的情况。

例如假设你有

// your first list:
List<Integer> intList = ... ;
// your second list:
List<String> stringList = ... ;

然后定义

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 ;
}
}

现在你可以做

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

并以通常的方式定义列。

如果由于某种原因确实无法进行数据转换,则可以将表的类型视为整数,每行的值作为两个列表的索引。使用值 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);
}
}

关于java - 向列添加数据的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31318713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com