将数据添加到列的简单方法

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)

  • @ponderingdev我知道你发布这个帖子已经有一年了,但万一你还没有发现:这些天创建的对象比以前便宜很多.http://drmirror.net/2013/06/06/object-creation/ (2认同)