我正在为我的soap服务编写一个JavaFX客户机,我的fxml页面必须包含一个完全可编辑的TableView,它由产品类实体组成。我的表现在由两个文本列和一个包含双值的文本列组成。我想添加一个选择列,在它的单元格中包含复选框项。使用集成演示应用程序,我扩展了一个使用复选框的单元格类:
public class CheckBoxCell<S, T> extends TableCell<S, T> {
private final CheckBox checkBox;
private ObservableValue<T> ov;
public CheckBoxCell() {
this.checkBox = new CheckBox();
this.checkBox.setAlignment(Pos.CENTER);
setAlignment(Pos.CENTER);
setGraphic(checkBox);
}
@Override
public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setGraphic(checkBox);
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().unbindBidirectional((BooleanProperty) ov);
}
ov = getTableColumn().getCellObservableValue(getIndex());
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov);
}
}
}
@Override
public void startEdit() {
super.startEdit();
if (isEmpty()) {
return;
}
checkBox.setDisable(false);
checkBox.requestFocus();
}
@Override
public void cancelEdit() {
super.cancelEdit();
checkBox.setDisable(true);
}
}
然后,在fxml视图控制器类中,我为请求的TableColumn设置一个cellFactory:
private Callback<TableColumn, TableCell> createCheckBoxCellFactory() {
Callback<TableColumn, TableCell> cellFactory = new Callback<TableColumn, TableCell> () {
@Override
public TableCell call(TableColumn p) {
return new CheckBoxCell();
}
};
return cellFactory;
}
...
products_table_remove.setCellFactory(createCheckBoxCellFactory());
我的问题是:
1)如何使用PropertyValueFactory用未选中的复选框填充此列
private final ObservableList <Boolean> productsToRemove= FXCollections.observableArrayList();
private void setProductDescColumnCellHandler() {
products_table_remove.setOnEditCommit(new EventHandler() {
@Override
public void handle(CellEditEvent t) {
...
1)可以使用预定义的类javafx.scene.control.cell.CheckBoxTableCell来代替您的类。
2)为了将信息添加到现有实例中,我建议继承+委托,对于每个数据实例,实例化一个视图实例,该视图实例可用于向TableView提供信息:
class ProductV extends Product {
ProductV( Product product ) {
this.product = product;
}
final Product product;
final BooleanProperty delected = new SimpleBooleanProperty( false );
}
我的问题与来自JavaFX的TableView有关。JavaFx建议使用属性来存储将在表中显示的值(SimpleSttringProperty等),如下面的示例所示。 这难道不是Java的内存开销(为每个单元格创建另一个对象)吗?我将使用TableView从数据库中显示超过10,000行。难道没有一种方法可以避免这种情况,并像Swing之前那样简单地工作吗?TableView不能只获取要表示的值吗
我正在使用JavaFx,我有一个用sceneBuilder创建的表视图,它包含3列,其中一列用于复选框,还有一个名为print\u tab的按钮,我想在单击此按钮时使用复选框选择行- 我读了许多关于回调复选框的表列的示例,但不知道如何做到这一点。 这是控制器: 在模型类上,我有以下代码: } fxml代码: 任何想法? 编辑: 我试过这样做,但即使我勾选了一些复选框,我总是得到错误的结果,不是真的
主要内容:创建复选框,复选框状态,示例复选框允许用户进行多项选择。例如,当订购披萨时,可以添加多个调味料。单选按钮或切换按钮用于单选或无选择。 创建复选框 我们可以使用中的构造函数来创建的对象。 创建不带标题的复选框,如下代码所示 - 要创建带有字符串标题的复选框,如下代码所示 - 创建复选框后,我们可以更改其文本并将其选中。 复选框状态 可以使用来表示三个状态: Yes No Not Applicable(不适用) “不适用”状态是
问题内容: 我创建了一个单元工厂包装器,以启用JavaFX表单元的自定义配置。请参见下面的代码。 这个cellfactory包装器通常可以在我所有的表视图中导航。但是,一旦我在系统中执行其他功能,例如添加新记录,编辑记录等,就会引发以下错误。 我似乎无法弄清楚为什么这个包装器认为我的CML类中包含空值。任何人对于为什么会抛出此Null Pointer异常有任何想法? 问题答案: 不能保证在第一次调
我是JavaFx新手。我设计了一个table thorugh scenebuilder,其中第1列有一个按钮,第2列有一个复选框。单击按钮时,我希望获得checkbox属性的内容。但问题是,我的输出总是错误的。这是我的密码 模型JAVA 在我的控制器类中,我按照以下方式设计了initialize()方法 控制器。JAVA 这里是
我有一个JavaFX TabPane,其中我放置了一个按钮作为选项卡选择器。所以我可以在按钮上画形状。当我像这样画一个简单的多边形时,一切都很好: 但是我想要一个这样的多边形: 当我尝试使用5个角坐标时,只有我的第一个示例正在绘制。我需要更改什么才能绘制底部的线?是否可以使用多边形?还是我需要使用其他东西?