我正在使用JavaFx,我有一个用sceneBuilder创建的表视图,它包含3列,其中一列用于复选框,还有一个名为print\u tab的按钮,我想在单击此按钮时使用复选框选择行-
我读了许多关于回调复选框的表列的示例,但不知道如何做到这一点。
这是控制器:
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());
}
}
}
我试过这样做,但即使我勾选了一些复选框,我总是得到错误的结果,不是真的,你知道吗?同时,我不认为迭代所有集合是好的。。。
正如这里和这里所建议的,正确定义的属性对于工作表模型至关重要。通过这种方式,按钮处理程序可以遍历表的ObservableList以查找所选行。要单独研究这个问题,请从这个完整的示例开始。以下更改迭代表模型,检查active属性以生成所示的结果:
Button b = new Button("Print Seleceted");
b.setOnAction((ActionEvent e) -> {
for (Person p : table.getItems()) {
if (p.active.get()) {
System.out.println(p.lastName.get() + ": " + p.email.get());
}
}
});
vbox.getChildren().addAll(label, table, b);
控制台:
Smith: jacob.smith@example.com
Williams: ethan.williams@example.com
Brown: michael.brown@example.com
我将在OMis
类中实现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());
问题内容: 我需要有关jQuery选择器的帮助。假设我有一个标记,如下所示: 除了用户单击时,如何获取所有复选框? 问题答案: 一个更完整的示例适用于您的情况: 当被点击复选框,该复选框的状态进行检查,并在当前形式的所有复选框被设置为相同的状态。 请注意,您无需从选择中排除该复选框,因为该复选框的状态将与其他所有复选框相同。如果出于某些原因确实需要排除,则可以使用以下方法:
主要内容:创建一个选择框,示例,实例-2JavaFX选择框允许用户在几个选项之间快速选择。 创建一个选择框 我们可以使用中的构造函数来创建对象。 以下代码显示了如何使用其构造函数创建和填充选择框。 列表项是从可观察的列表来创建的。 我们还可以使用一个空的选择框使用它的默认构造函数,并使用方法设置列表项。 上面的代码还向选择框中添加了一个分隔符对象。分隔符分隔控件项目。 示例 上面的代码生成以下结果。 实例-2 以下代码显示了如何在中填充
主要内容:创建复选框,复选框状态,示例复选框允许用户进行多项选择。例如,当订购披萨时,可以添加多个调味料。单选按钮或切换按钮用于单选或无选择。 创建复选框 我们可以使用中的构造函数来创建的对象。 创建不带标题的复选框,如下代码所示 - 要创建带有字符串标题的复选框,如下代码所示 - 创建复选框后,我们可以更改其文本并将其选中。 复选框状态 可以使用来表示三个状态: Yes No Not Applicable(不适用) “不适用”状态是
我的JavaFx FXML应用程序有问题。 当我在表单上选中复选框时,我想根据单击的复选框执行一个方法。是否有任何方法可以将复选框的名称传递给该方法,以便对其执行一些有条件的工作? 我有两个复选框,只能选择一个。当我单击其中一个时,应取消选择另一个,反之亦然。显然,下面的代码将无法工作,因此我希望传递被单击对象的名称。 任何帮助都将不胜感激,非常感谢。
我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件
在我的JavaFX应用程序中,我在树形视图中使用复选框来更改节点的可见性。 选中复选框=一些节点可见 取消选中复选框=一些节点是不可见的 但是,在特殊情况下,应提示用户确认其选择,因为激活特定复选框时可能会出现问题。将打开一个对话框窗口,用户可以在其中选择“是”和“否”。如果用户选择“是”,节点将可见,一切正常。但如果用户选择“否”,则应再次取消选中该复选框。 我的想法是检查中的条件(在本例中,在