我想控制基于树中级别的TreeTableView的某些行的样式。setRowFactory
如果此行是Table根目录的第一级子级的一部分,则使用并应用样式。样式工作正常,但我也想禁用这些行的复选框。我能够,setDisable(true)
但是这也禁用了TreeItem的扩展,并且SetEditable(false)
似乎没有任何作用。
编辑:据我了解,表必须设置为可编辑的,然后默认情况下列是可编辑的。但是,如果我设置了,TreeTableRow.setEditable(true);
否则TreeTableRow.setEditable(false);
我永远都看不到任何效果。setEditable的描述似乎正是我想要的,但是我无法以这种方式使用它。
void javafx.scene.control.Cell.setEditable(boolean arg0)
setEditable public final void setEditable(boolean value)
允许某些单元格无法进行编辑。这在以下情况下很有用:例如,列表具有“标题行”-标题行不可编辑是没有意义的,因此它们应将editable设置为false。参数:value-
一个布尔值,表示该单元格是否可编辑。如果> true,则该单元格是可编辑的;如果为false,则该单元格不能被编辑。
主要:
public class TreeTableViewRowStyle extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
// create the treeTableView and colums
TreeTableView<Person> ttv = new TreeTableView<Person>();
TreeTableColumn<Person, String> colName = new TreeTableColumn<>("Name");
TreeTableColumn<Person, Boolean> colSelected = new TreeTableColumn<>("Selected");
colName.setPrefWidth(100);
ttv.getColumns().add(colName);
ttv.getColumns().add(colSelected);
ttv.setShowRoot(false);
ttv.setEditable(true);
// set the columns
colName.setCellValueFactory(new TreeItemPropertyValueFactory<>("name"));
colSelected.setCellFactory(CheckBoxTreeTableCell.forTreeTableColumn(colSelected));
colSelected.setCellValueFactory(new TreeItemPropertyValueFactory<>("selected"));
ttv.setRowFactory(table-> {
return new TreeTableRow<Person>(){
@Override
public void updateItem(Person pers, boolean empty) {
super.updateItem(pers, empty);
boolean isTopLevel = table.getRoot().getChildren().contains(treeItemProperty().get());
if (!isEmpty()) {
if(isTopLevel){
setStyle("-fx-background-color:lightgrey;");
setEditable(false); //THIS DOES NOT SEEM TO WORK AS I WANT
//setDisable(true); //this would disable the checkbox but also the expanding of the tree
}else{
setStyle("-fx-background-color:white;");
}
}
}
};
});
// creating treeItems to populate the treetableview
TreeItem<Person> rootTreeItem = new TreeItem<Person>();
TreeItem<Person> parent1 = new TreeItem<Person>(new Person("Parent 1"));
TreeItem<Person> parent2 = new TreeItem<Person>(new Person("Parent 1"));
parent1.getChildren().add(new TreeItem<Person>(new Person("Child 1")));
parent2.getChildren().add(new TreeItem<Person>(new Person("Child 2")));
rootTreeItem.getChildren().addAll(parent1,parent2);
ttv.setRoot(rootTreeItem);
// build and show the window
Group root = new Group();
root.getChildren().add(ttv);
stage.setScene(new Scene(root, 300, 300));
stage.show();
}
}
模特儿
public class Person {
private StringProperty name;
private BooleanProperty selected;
public Person(String name) {
this.name = new SimpleStringProperty(name);
selected = new SimpleBooleanProperty(false);
}
public StringProperty nameProperty() {
return name;
}
public BooleanProperty selectedProperty() {
return selected;
}
public void setName(String name){
this.name.set(name);
}
public void setSelected(boolean selected){
this.selected.set(selected);
}
}
基本的问题是,所有可编辑的树/表格单元格(或类似CheckBoxXX的伪可编辑单元)都不尊重它们所包含的行的可编辑性。我认为这是一个错误。
为了克服这个问题,您必须扩展(伪)可编辑单元格,并使它们尊重行的可编辑单元格。伪编辑单元与实际编辑单元的确切实现方式有所不同。以下是内联示例,对于频繁使用的情况,您可以将其设为顶级并重新使用。
CheckBoxTreeTableCell:子类并覆盖updateItem以重新绑定其禁用的属性,例如
colSelected.setCellFactory(c -> {
TreeTableCell cell = new CheckBoxTreeTableCell() {
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
if (getGraphic() != null) {
getGraphic().disableProperty().bind(Bindings
.not(
getTreeTableView().editableProperty()
.and(getTableColumn().editableProperty())
.and(editableProperty())
.and(getTreeTableRow().editableProperty())
));
}
}
};
return cell;
});
对于真正的编辑单元格,fi TextFieldTreeTableCell:如果行不可编辑,则重写startEdit并返回而不调用super
colName.setCellFactory(c -> {
TreeTableCell cell = new TextFieldTreeTableCell() {
@Override
public void startEdit() {
if (getTreeTableRow() != null && !getTreeTableRow().isEditable()) return;
super.startEdit();
}
};
return cell;
});
现在,您可以像执行操作一样切换行的可编辑性,对逻辑进行了一些更改以保证在所有情况下都可以完全清除:
ttv.setRowFactory(table-> {
return new TreeTableRow<Person>(){
@Override
public void updateItem(Person pers, boolean empty) {
super.updateItem(pers, empty);
// tbd: check for nulls!
boolean isTopLevel = table.getRoot().getChildren().contains(treeItemProperty().get());
if (!isEmpty() && isTopLevel) {
// if(isTopLevel){
setStyle("-fx-background-color:lightgrey;");
setEditable(false);
}else{
setEditable(true);
setStyle("-fx-background-color:white;");
}
}
};
});
问题内容: 如果我想将cq5组件设置为在A页中可编辑但在B页中不可编辑,是否可以。 例如:在A页上,我有C组件,我们允许作者打开对话框并编辑该组件。但是我们不允许作者打开对话框来编辑页面B上的组件C。我尝试研究cq:EditConfig 链接,但这还不足以解决我的问题。 问题答案: 您可以在包含之前设置ComponentContext.BYPASS_COMPONENT_HANDLING_ON_IN
问题内容: 我正在使用创建时间选择器。内的文字是可编辑的。但我想将设置为不可编辑,因为有机会给出无效的值。谁能帮我? 问题答案: 请尝试以下操作: 只要您自己没有通过调用更改微调器编辑器,此方法就应该起作用。 告诉我们这是否有帮助。
我有一个剑道网格,根据第一列中的值,COR ABA编号可以编辑也可以不编辑。因此,如果NOC代码=='C01',则COR ABA编号可编辑,否则不可编辑。 我通过在列和编辑处理程序中添加编辑事件来实现这一点,在不允许编辑的情况下,禁用HTML输入Kendo创建。(在栅格定义中,我有可编辑(true)开始)。我希望通过在网格的数据绑定事件中执行逻辑检查来实现这一点。也就是说,在绑定所有数据后,迭代数
本文向大家介绍PyQt5 QTableView设置某一列不可编辑的方法,包括了PyQt5 QTableView设置某一列不可编辑的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 写一个代理。 设置一下就可以了。 以上这篇PyQt5 QTableView设置某一列不可编辑的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
我有一个页面,需要在自定义portlet中为用户设置并分配站点角色。因此,我能够在一个列表中获取“用户现有角色”,并在另一个列表中获取所有“可用站点角色”。那么,我该如何对分配给用户的行进行调整或任何验证,以使其不可编辑。比方说(我们有四个站点类型的角色,即站点管理员、站点所有者、站点成员和站点内容审阅者,现在相应的用户已经分配了站点管理员角色。因此,现在在搜索容器行中,我需要将站点管理员行设置为
本文向大家介绍vue 设置 input 为不可以编辑的实现方法,包括了vue 设置 input 为不可以编辑的实现方法的使用技巧和注意事项,需要的朋友参考一下 我用最笨的方法,先实现功能先,用两个input,一个可以编辑,一个不可以编辑,失去焦点后隐藏可以点击的那个,点“编辑”时,显示可以编辑的那个input 以上这篇vue 设置 input 为不可以编辑的实现方法就是小编分享给大家的全部内容了,