Database 在javafx中从数据库搜索时,如何在TableView中放置复选框并使其处于选中状态

Database 在javafx中从数据库搜索时,如何在TableView中放置复选框并使其处于选中状态,database,checkbox,javafx,tableview,Database,Checkbox,Javafx,Tableview,我的数据库有5个字段UserName、Password、RePassword、Admin、NormalUser基于我的数据库字段,我成功创建了一个表单,其中包含一个包含UserName、Password、RePassword、Admin、NormalUser列的Tableview。 Admin和Username是布尔值,因为我想区分用户类型。当我从数据库中获取数据时,我可以看到单词False和True,但我想在Admin和NormalUser列中用复选框显示它们。我不知道如何编写这部分代码。我在

我的数据库有5个字段UserName、Password、RePassword、Admin、NormalUser基于我的数据库字段,我成功创建了一个表单,其中包含一个包含UserName、Password、RePassword、Admin、NormalUser列的Tableview。 Admin和Username是布尔值,因为我想区分用户类型。当我从数据库中获取数据时,我可以看到单词False和True,但我想在Admin和NormalUser列中用复选框显示它们。我不知道如何编写这部分代码。我在互联网上搜索了一下,发现了一个动态创建TableView的代码,所有列都有String类型,但我无法将其修改为三列为String类型,两列为checkboxesBoolean类型,并在获取这两列数据后将其选中

import Scheduling.ConnectDBwithFunc;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.NodeOrientation;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.util.Callback;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Arrays;


class FillTableofUsers{

//TABLE VIEW AND DATA
private ObservableList<ObservableList> data;


//CONNECTION DATABASE
public TableView buildData(){
    Connection c = null;
    TableView tableview = new TableView();
    tableview.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);
    data = FXCollections.observableArrayList();
    try{

        c = ConnectDBwithFunc.connect(c);
        String SQL = "SELECT USERNAME, PASSWORD ,REPASSWORD, ADMIN , 
    NORMALUSER from USERS";

        //ResultSet
        ResultSet rs = c.createStatement().executeQuery(SQL);

        /**********************************
         * TABLE COLUMN ADDED DYNAMICALLY *
         **********************************/

        ArrayList<String> tableTitr = new ArrayList<>
(Arrays.asList("UserName","Password"," RePassword" , "Password" 
,"Admin","NormalUser"));
        for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){

            //We are using non property style for making dynamic table
            final int j = i;
            TableColumn col = new TableColumn(tableTitr.get(i));

            col.setCellValueFactory(new 
Callback<CellDataFeatures<ObservableList, String>, ObservableValue<String>>() {
                public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
                    return new SimpleStringProperty(param.getValue().get(j).toString());
                }
            });

            tableview.getColumns().addAll(col);
        }

        /********************************
         * Data added to ObservableList *
         ********************************/
        String[] rowInfo = new String[rs.getMetaData().getColumnCount()+1];
        while(rs.next()){
            //Iterate Row
            ObservableList<String> row = FXCollections.observableArrayList();
            for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
                //Iterate Column
                if (rs.getString(i)!=null)
                    rowInfo[i] = rs.getString(i);


                else
                    rowInfo[i] = " ";

                row.add(rowInfo[i]);
            }

            data.add(row);
        }

        //FINALLY ADDED TO TableView
        tableview.setItems(data);

    }catch(Exception e){
        e.printStackTrace();
        System.out.println("Error on Building Data");
    }


    return tableview;
}

}

首先为表(如用户)创建一个模型类,为表视图和列(如TableView)使用正确类型的变量,而不是原始类型的TableView。然后可以在布尔列上设置CheckBoxTableCell。有关如何设置表和的示例,请参阅。谢谢您的帮助。我做了您所说的每件事,现在我有三个字符串列和两个带有复选框的列,但我的复选框为空,并且数据库值未显示在复选框中。我解决了所有问题。我的二传手和传接手的定义不正确。我重写了它们,问题就解决了。非常感谢。