Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx tableview在循环中添加布尔值_Java_Checkbox_Javafx_Boolean_Tableview - Fatal编程技术网

Javafx tableview在循环中添加布尔值

Javafx tableview在循环中添加布尔值,java,checkbox,javafx,boolean,tableview,Java,Checkbox,Javafx,Boolean,Tableview,我试图在表中的for循环for复选框中使用布尔值false填充tableview。我的目标是将一个csv文件加载到tableview中,第一列为“复选框”,这样用户就可以为进一步的任务选择行 当我在ObservalArrayList中定义相同的数据时,它是有效的 public void addPredfined_Data_to_Tableview() { studentData_Predefined = FXCollections.observableArrayList(

我试图在表中的for循环for复选框中使用布尔值false填充tableview。我的目标是将一个csv文件加载到tableview中,第一列为“复选框”,这样用户就可以为进一步的任务选择行

当我在ObservalArrayList中定义相同的数据时,它是有效的

public void addPredfined_Data_to_Tableview() {

    studentData_Predefined = FXCollections.observableArrayList(
            new StudentTableModel(false, "James", "Atlanta"),
            new StudentTableModel(false, "Karen", "New York"),
            new StudentTableModel(false, "Robert", "Texas")
            );
    tableView.setItems(studentData_Predefined);
}
问题是,当我尝试在for循环中更新tableview时,它不起作用。我得到的错误是
IndexOutOfBoundsException:索引:0,大小:0

public void load_CSV_file_to_Tableview() {

    for (int i = 0; i < 3; i++) {
        studentData_fromCSV = FXCollections.observableArrayList(
                new StudentTableModel(Boolean.FALSE, "James", "Atlanta")
                );
    }
    tableView.setItems(studentData_fromCSV);
}
他是我的班长

package application;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.util.Callback;

public class MainWindowController implements Initializable{

    @FXML public Button btn_addPredefined_data;
    @FXML public Button btn_load_csv_file;

    @FXML public TableView<StudentTableModel> tableView;
    @FXML public TableColumn<StudentTableModel, Boolean> col_CheckBox;
    @FXML public TableColumn<StudentTableModel, String> col_StudentName;
    @FXML public TableColumn<StudentTableModel, String> col_StudentLocation;

    public ObservableList<StudentTableModel> studentData_Predefined = FXCollections.observableArrayList();
    public ObservableList<StudentTableModel> studentData_fromCSV = FXCollections.observableArrayList();

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // TODO Auto-generated method stub

        col_CheckBox.setCellFactory(CheckBoxTableCell.forTableColumn(new Callback<Integer, ObservableValue<Boolean>>() {
            @Override
            public ObservableValue<Boolean> call(Integer param) {
                // TODO Auto-generated method stub
                return studentData_Predefined.get(param).chekboxStudentRowProperty();
            }
        }));

        col_StudentName.setCellValueFactory(new PropertyValueFactory<StudentTableModel, String>("studentName"));
        col_StudentLocation.setCellValueFactory(new PropertyValueFactory<StudentTableModel, String>("studentLocation"));

        tableView.setEditable(true);

        btn_addPredefined_data.setOnAction(e -> addPredfined_Data_to_Tableview());
        btn_load_csv_file.setOnAction(e -> load_CSV_file_to_Tableview());

    }

    public void addPredfined_Data_to_Tableview() {

        studentData_Predefined = FXCollections.observableArrayList(
                new StudentTableModel(false, "James", "Atlanta"),
                new StudentTableModel(false, "Karen", "New York"),
                new StudentTableModel(false, "Robert", "Texas")
                );
        tableView.setItems(studentData_Predefined);
    }

    public void load_CSV_file_to_Tableview() {

        for (int i = 0; i < 3; i++) {
            studentData_fromCSV = FXCollections.observableArrayList(
                    new StudentTableModel(Boolean.FALSE, "James", "Atlanta")
                    );
        }
        tableView.setItems(studentData_fromCSV);
    }


}
包应用;
导入java.net.URL;
导入java.util.ResourceBundle;
导入javafx.beans.value.observeValue;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.Button;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.CheckBoxTableCell;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.util.Callback;
公共类MainWindowController实现可初始化{
@FXML公共按钮btn\u添加预定义的\u数据;
@FXML公共按钮btn\u加载\u csv\u文件;
@FXML公共表视图表视图;
@FXML公共表列col_复选框;
@FXML公共表col_StudentName列;
@FXML公共表格Column_StudentLocation;
public ObservableList studentData_预定义=FXCollections.observableArrayList();
公共ObservableList studentData_fromCSV=FXCollections.observableArrayList();
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
//TODO自动生成的方法存根
col_CheckBox.setCellFactory(CheckBoxTableCell.forTableColumn)(新回调(){
@凌驾
公共observeValue调用(整数参数){
//TODO自动生成的方法存根
返回studentData_预定义的.get(param).chekboxStudentRowProperty();
}
}));
col_StudentName.setCellValueFactory(新属性值工厂(“StudentName”));
col_StudentLocation.setCellValueFactory(新属性值工厂(“StudentLocation”);
tableView.setEditable(true);
btn_addPredefined_data.setOnAction(e->addPredefined_data_to_Tableview());
btn_load_csv_file.setOnAction(e->load_csv_file_to_Tableview());
}
public void addpredefined_Data_to_Tableview(){
studentData_预定义=FXCollections.observableArrayList(
新学生表格模型(假,“詹姆斯”,“亚特兰大”),
new StudentTableModel(假,“Karen”,“纽约”),
新的StudentTableModel(假,“Robert”,“Texas”)
);
tableView.setItems(学生数据_预定义);
}
公共无效加载\u CSV\u文件\u到\u Tableview(){
对于(int i=0;i<3;i++){
studentData_fromCSV=FXCollections.observableArrayList(
新的StudentTableModel(Boolean.FALSE,“James”,“Atlanta”)
);
}
tableView.setItems(studentData_fromCSV);
}
}
这是完整的堆栈跟踪

Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)
    at application.MainWindowController$1.call(MainWindowController.java:43)
    at application.MainWindowController$1.call(MainWindowController.java:1)
    at javafx.scene.control.cell.CheckBoxTableCell.getSelectedProperty(CheckBoxTableCell.java:391)
    at javafx.scene.control.cell.CheckBoxTableCell.updateItem(CheckBoxTableCell.java:362)
    at javafx.scene.control.TableCell.updateItem(TableCell.java:663)
    at javafx.scene.control.TableCell.indexChanged(TableCell.java:468)
    at javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:116)
    at com.sun.javafx.scene.control.skin.TableRowSkinBase.updateCells(TableRowSkinBase.java:533)
    at com.sun.javafx.scene.control.skin.TableRowSkinBase.init(TableRowSkinBase.java:147)
    at com.sun.javafx.scene.control.skin.TableRowSkin.<init>(TableRowSkin.java:64)
    at javafx.scene.control.TableRow.createDefaultSkin(TableRow.java:212)
    at javafx.scene.control.Control.impl_processCSS(Control.java:872)
    at javafx.scene.Node.processCSS(Node.java:9056)
    at javafx.scene.Node.applyCss(Node.java:9153)
    at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1964)
    at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1797)
    at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1879)
    at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2528)
    at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1189)
    at javafx.scene.Parent.layout(Parent.java:1087)
    at javafx.scene.Parent.layout(Parent.java:1093)
    at javafx.scene.Parent.layout(Parent.java:1093)
    at javafx.scene.Scene.doLayoutPass(Scene.java:552)
    at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397)
    at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354)
    at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)
线程“JavaFX应用程序线程”java.lang.IndexOutOfBoundsException中的异常:索引:0,大小:0 位于java.util.ArrayList.rangeCheck(ArrayList.java:653) 获取(ArrayList.java:429) 在com.sun.javafx.collections.ObservableListWrapper.get上(ObservableListWrapper.java:89) 在application.MainWindowController$1.call(MainWindowController.java:43) 在application.MainWindowController$1.call(MainWindowController.java:1) 位于javafx.scene.control.cell.CheckBoxTableCell.getSelectedProperty(CheckBoxTableCell.java:391) 位于javafx.scene.control.cell.CheckBoxTableCell.updateItem(CheckBoxTableCell.java:362) 位于javafx.scene.control.TableCell.updateItem(TableCell.java:663) 位于javafx.scene.control.TableCell.indexChanged(TableCell.java:468) 位于javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:116) 位于com.sun.javafx.scene.control.skin.TableRowSkinBase.updateCells(TableRowSkinBase.java:533) 位于com.sun.javafx.scene.control.skin.TableRowSkinBase.init(TableRowSkinBase.java:147) 位于com.sun.javafx.scene.control.skin.TableRowSkin.(TableRowSkin.java:64) 位于javafx.scene.control.TableRow.createDefaultSkin(TableRow.java:212) 位于javafx.scene.control.control.impl_processCSS(control.java:872) 位于javafx.scene.Node.processCSS(Node.java:9056) 位于javafx.scene.Node.applyCss(Node.java:9153) 位于com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1964) 位于com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1797) 位于com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1879) 位于com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2528) 在com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1189)上 位于javafx.scene.Parent.layout(Parent.java:1087) 位于javafx.scene.Parent.layout(Parent.java:1093) 位于javafx.scene.Parent.layout(Parent.java:1093) 位于javafx.scene.scene.doLayoutPass(scene.java:552) 位于javafx.scene.scene$ScenePulseListener.pulse(scene.java:2397) 位于com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355) 位于java.security.AccessController.doPrivileged(本机方法) 位于com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354) 位于com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381) 位于com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510) 位于com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490) 位于com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319) 位于com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:95) 在com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法) 在com.sun.glass.ui.win.WinApplication.lambda上
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)
    at application.MainWindowController$1.call(MainWindowController.java:43)
    at application.MainWindowController$1.call(MainWindowController.java:1)
    at javafx.scene.control.cell.CheckBoxTableCell.getSelectedProperty(CheckBoxTableCell.java:391)
    at javafx.scene.control.cell.CheckBoxTableCell.updateItem(CheckBoxTableCell.java:362)
    at javafx.scene.control.TableCell.updateItem(TableCell.java:663)
    at javafx.scene.control.TableCell.indexChanged(TableCell.java:468)
    at javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:116)
    at com.sun.javafx.scene.control.skin.TableRowSkinBase.updateCells(TableRowSkinBase.java:533)
    at com.sun.javafx.scene.control.skin.TableRowSkinBase.init(TableRowSkinBase.java:147)
    at com.sun.javafx.scene.control.skin.TableRowSkin.<init>(TableRowSkin.java:64)
    at javafx.scene.control.TableRow.createDefaultSkin(TableRow.java:212)
    at javafx.scene.control.Control.impl_processCSS(Control.java:872)
    at javafx.scene.Node.processCSS(Node.java:9056)
    at javafx.scene.Node.applyCss(Node.java:9153)
    at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1964)
    at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1797)
    at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1879)
    at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2528)
    at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1189)
    at javafx.scene.Parent.layout(Parent.java:1087)
    at javafx.scene.Parent.layout(Parent.java:1093)
    at javafx.scene.Parent.layout(Parent.java:1093)
    at javafx.scene.Scene.doLayoutPass(Scene.java:552)
    at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397)
    at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354)
    at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)
    col_CheckBox.setCellFactory(CheckBoxTableCell.forTableColumn(new Callback<Integer, ObservableValue<Boolean>>() {
        @Override
        public ObservableValue<Boolean> call(Integer param) {
            // TODO Auto-generated method stub
            return tableView.getItems().get(param).chekboxStudentRowProperty();
        }
    }));