将超过100个命名列添加到JavaFX Tableview的简单方法

时间:2016-05-28 01:21:55

标签: java javafx javafx-8

在我的项目中我需要在JavaFX GUI中向Tablevie添加超过100列,最近我必须用数据填充这些列。每个列都必须有一个特定的名称,而不是我必须包含的未分类数据,有时候列也可以为空,这取决于数据。要包含数据,我必须知道列的名称。

简而言之,我必须将许多数据分类到Tablevie中的100多个列中。

Tableview是使用Scenebuilder创建的,目前是空的。

1 个答案:

答案 0 :(得分:0)

您的问题遗漏了大量针对您案例的信息,但我会尽力为您提供一般的处理方式。根据您的需要,您可能需要对其进行修改。

显然使用这么多的数据很麻烦,并且在tableview中显示超过100列并不是一个好的解决方案,因为无论你做什么都会得到水平溢出,因为没有屏幕可以显示所有数据都没有滚动。但我假设这是你所知道的并且对你的实施是必要的。

如果案件是您事先知道列将是什么,我会这样做:

首先创建一个DataContainer类,作为存储您想要在tableview中表示的数据的方式。

public class DataContainer
{
    private String dataValue1;
    private String dataValue2;
    // Repeat for all the data you need represented.

    public DataContainer(String dataValue1,
                         String dataValue2,
                         //And so on.)
    {
         this.dataValue1 = dataValue1;
         this.dataValue2 = dataValue2;
         //And so on.
    }

    public String getDataValue1()
    {
        return this.dataValue1;
    }

    public String setDataValue1(String value)
    {
        this.dataValue1 = value;
    }

    public String getDataValue2()
    {
        return this.dataValue1;
    }

    public String setDataValue2(String value)
    {
        this.dataValue2 = value;
    }

    //Repeat for all data.
}

您如何接收数据并对其进行排序显然取决于您,但看起来像这样:

ArrayList<DataContainer> data;

//Depends on how you receive your data.
foreach(InputData dataObject in recievedData)
{
     DataContainer newDataContainer = new DataContainer(dataObject.dataValue1,
                                                        dataObject.dataValue2,
                                                        //And so on.
                                                        );
     data.add(newDataContainer);
}

ObservableList<DataContainer> observableData = FXCollections.observabaleArrayList<DataContainer>(data);

最后在tableview中创建所有列并分配数据。也许您可以使用算法执行此操作,也许您必须单独指定每列。取决于您的实施。

TableColumn value1 = new TableColumn("Value 1");
firstNameCol.setCellValueFactory(new PropertyValueFactory<DataContainer, String>("dataValue1")); //The string corresponds to the member name of that dataValue in the DataContainer class.
TableColumn value2 = new TableColumn("Value 2");
firstNameCol.setCellValueFactory(new PropertyValueFactory<DataContainer, String>("dataValue2")); //The string corresponds to the member name of that dataValue in the DataContainer class.

table.setItems(observableData);
table.getColumns().addAll(value1, value2); //For all columns.

我很抱歉,如果我误解了你的问题,但是为了补充阅读,你可能想查阅官方教程:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm

以前的答案是动态分配tableview中的列。 javafx 2- tableview dynamic column

祝你好运。