gpt4 book ai didi

java - 如何在 JavaFX 上使用 checkBox 选择行?

转载 作者:行者123 更新时间:2023-12-01 23:14:47 24 4
gpt4 key购买 nike

我正在使用 JavaFx,我有一个用 sceneBuilder 创建的 TableView ,它包含 3 列,其中一列用于 checkBoxes ,还有一个名为 print_tab 的按钮,当我点击这个按钮时,我想得到 用 checkBox 选择的行 -> true 但我不知道该怎么做:

我读了很多关于 callBack the table column of checkbox 的例子,但不知道该怎么做。

这是 Controller :

    import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Callback;


public class RecapController implements Initializable{

@FXML
private TableView<OMission> missionTable;

@FXML
private TableColumn<OMission, Boolean> checkedCol;

private ObservableList<OMission> UserMission =
FXCollections.observableArrayList();

private OMission mission=null;



@Override
public void initialize(URL arg0, ResourceBundle arg1) {



try {
load_recap();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

public void load_recap(){


.....


checkedCol.setCellFactory(
CheckBoxTableCell.forTableColumn(checkedCol)
);

checkedCol.setCellValueFactory(new PropertyValueFactory<>("remark"));

checkedCol.setEditable(true);


}


public void print_tab() throws Exception {

// here is the method that the button calls , i want to get here the selected rows with checkbox -> true

}

}

在类模型上我有这段代码:

    public class OMission {

private String ObjMission ;
private Boolean remark;

public OMission( String objMission ) {

This.objMission = ObjMission ;

remark = false;

}

public Boolean getRemark() {
return remark;
}

public void setRemark(Boolean remark) {
this.remark = remark;
}


public String getObjMission() {
return ObjMission;
}



public void setObjMission(String objMission) {
ObjMission = objMission;
}

fxml代码:

<?xml version="1.0" encoding="UTF-8"?>

<?import com.jfoenix.controls.JFXButton?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane fx:id="pan" prefHeight="740.0" prefWidth="1258.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.RecapController">
<children>
<JFXButton layoutX="16.0" layoutY="22.0" onAction="#OpenMission" style="-fx-background-color: #0A4969;" text="Ajouter une nouvelle mission : " textFill="WHITE">
<font>
<Font size="14.0" />
</font>
</JFXButton>
<TableView fx:id="missionTable" layoutX="16.0" layoutY="64.0" prefHeight="659.0" prefWidth="1226.0">
<columns>
<TableColumn prefWidth="612.5" text="RAPPORT DE MISSION">
<columns>


<TableColumn fx:id="local" prefWidth="100.0" text="Localité" />
<TableColumn fx:id="objmission" prefWidth="243.0" text="Objet Mission" />

</columns>
</TableColumn>

<TableColumn fx:id="checkedCol" prefWidth="75.0" text="select" /> // That's the button i want to click on
</columns>
</TableView>
<JFXButton layoutX="263.0" layoutY="25.0" onAction="#print_tab" text="print" />
<CheckBox fx:id="SelectAll" layoutX="1154.0" layoutY="41.0" mnemonicParsing="false" text="Select All" />

</children>

有什么想法吗?

编辑:

public void print_tab() throws Exception {

for(OMission bean : UserMission)
{
System.out.println(bean.getRemark()); // always getting false
if(bean.getRemark()) {

System.out.println(bean.getObjMission());
}
}

}

我试过这种方式,但即使我选中了一些复选框,我总是得到 false not true,知道吗?同时我认为迭代所有集合不是一件好事...

最佳答案

我会在 OMission 类中实现 FX 属性模式:

public class OMission {

private final StringProperty objMission = new SimpleStringProperty(this, "objMission");
private final BooleanProperty remark = new SimpleBooleanProperty(this, "remark");

public OMission(String objMission) {
this.objMission.set(objMission);
this.remark.set(false);
}

public StringProperty objMissionProperty() {
return objMission;
}

public String getObjMission() {
return objMissionProperty().get();
}

public void setObjMission(String objMission) {
objMissionProperty().set(objMission);
}

public BooleanProperty remarkProperty() {
return remark;
}

public Boolean getRemark() {
return remarkProperty().get();
}

public void setRemark(Boolean remark) {
remarkProperty().set(remark);
}
}

然后你可以替换CellValueFactory列:

checkedCol.setCellValueFactory(new PropertyValueFactory<>("remark"));

与:

checkedCol.setCellValueFactory(cellData -> cellData.getValue().remarkProperty());

关于java - 如何在 JavaFX 上使用 checkBox 选择行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69155467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com