Javafx tableview在循环中添加布尔值
我试图在表中的for循环for复选框中使用布尔值false填充tableview。我的目标是将一个csv文件加载到tableview中,第一列为“复选框”,这样用户就可以为进一步的任务选择行 当我在ObservalArrayList中定义相同的数据时,它是有效的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(
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();
}
}));