当前位置: 首页 > 知识库问答 >
问题:

使用二维数组填充tableview

包德业
2023-03-14

我对Javafx不熟悉,想知道如何从2维字符串数组填充桌面视图:

    String[][] staffArray = (String[][]) connection.getAll("StaffServices");
    ObservableList row = FXCollections.observableArrayList(staffArray);

    //don't know what should go in here

    staffTable.setItems(row);

会非常感激你的回应。

共有2个答案

叶俊郎
2023-03-14

JavaFX中TableView的最佳实践是使用具有属性的对象并将其绑定到列。

我建议继续前进或将您的2维数组转换为更强类型的模型。

你的目标是拥有一个可观察的列表

Oracle对TableView有很好的介绍,它显示了我建议的案例。

焦光霁
2023-03-14

我认为JavaFX应该有一个只接受2d数组并制作表格的方法,但制作起来并不难。诀窍是使用CellValueFactory为每列获取正确的数组索引,而不是获取bean。这类似于我使用的代码。

import java.util.Arrays;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TableViewSample extends Application {

    @Override
    public void start(Stage primaryStage) {
        StackPane root = new StackPane();
        String[][] staffArray = {{"nice to ", "have", "titles"},
                                 {"a", "b", "c"},
                                 {"d", "e", "f"}};
        ObservableList<String[]> data = FXCollections.observableArrayList();
        data.addAll(Arrays.asList(staffArray));
        data.remove(0);//remove titles from data
        TableView<String[]> table = new TableView<>();
        for (int i = 0; i < staffArray[0].length; i++) {
            TableColumn tc = new TableColumn(staffArray[0][i]);
            final int colNo = i;
            tc.setCellValueFactory(new Callback<CellDataFeatures<String[], String>, ObservableValue<String>>() {
                @Override
                public ObservableValue<String> call(CellDataFeatures<String[], String> p) {
                    return new SimpleStringProperty((p.getValue()[colNo]));
                }
            });
            tc.setPrefWidth(90);
            table.getColumns().add(tc);
        }
        table.setItems(data);
        root.getChildren().add(table);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}
 类似资料:
  • 到目前为止,这就是我得到的,但我不太确定接下来该怎么办。我(认为)这里发生的是,它到达数组的第一个位置,在0,0处,并生成一个数字。然后转到1,1和2,2,依此类推。我不确定该从那里开始,我相信有一种更有效的方法可以一次填充整行或整列。 此外,我的编译器不允许我像平时一样使用cout或endl?它坚持我使用std::cout,我只是想知道为什么。

  • 问题内容: 我是Java 8的新手,目前无法完全掌握Streams,是否可以使用Stream功能操作填充数组?这是我如何使用标准的for循环来实现的示例代码: 如果有可能,我将如何使用Stream?如果可能,是否方便(性能和可读性明智)? 问题答案: 在这里,您有一个解决方案,它生成数组而不是修改先前定义的变量: 如果要使用并行流,那么避免诸如修改变量(数组或对象)之类的副作用非常重要。这可能会导

  • 问题内容: 嗨,我正在尝试根据用户输入自动填充2d数组。用户将输入1个数字,该数字将设置2d数组的大小。然后,我想打印出数组的数字。例如,如果用户输入数字4。2d数组将是4行乘4列,并且应包含数字1到16,并打印如下。 但是,我正在努力思考正确的声明来做到这一点。目前,我的代码只是打印出包含*的2d数组。 有谁知道我如何打印数字的任何想法,我真的被卡住了。我的代码如下: 问题答案: 读取n值,

  • 您知道如何用流中的单词填充数组吗?这是我目前所能做到的: 所以它看起来像{{1,2,3},{4,5,6},{7,8,9},…}

  • 我正在尝试用C++做任务。我需要创建这个函数: 现在我的示例代码如下所示: 我需要用从1到行*列的数字填充数组,从[0][0]和对角线开始。如何在本例中声明并初始化带有数组的函数,然后对角填充?如有任何帮助,我们将不胜感激!

  • 问题内容: 背景 我有一个零初始化的一维NumPy数组。 然后我有一个Pandas DataFrame,其中两列都有索引: 对于每对索引,我想将numpy数组中相应索引的值设置为True。 我目前的解决方案 我可以通过将一个函数应用于DataFrame来做到这一点: 我想向量化此操作 这可以按我期望的方式工作,但是出于乐趣,我想对操作进行矢量化处理。我对此不是很熟练,而且我在网上搜索并没有使我走上