gpt4 book ai didi

javafx如何禁用checkboxTreeItem中的一项?

转载 作者:行者123 更新时间:2023-11-30 03:39:23 29 4
gpt4 key购买 nike

I am new to JavaFX and I am having a problem in checkbox Tree View.
I want to disable one item inside root value **Serial No but as per JavaFX documentation, it seems that it is not possible.

I have disabled click effect cbTreeViewdisable(treeItems, 3)
Is there any way to grey out any one value (or set an id) so that user knows it is disabled.

private TreeView<String> cbTreeView;    
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
cbTreeView = new TreeView();
CheckboxTreeItem<String> rootItem = new CheckboxTreeItem("Serial No.");
final CheckboxTreeItem[] treeItems = new CheckboxTreeItem[6];
for (int i = 0; i < 6; i++) {
treeItems[i] = new CheckboxTreeItem(""+i+"");
rootItem.getChildren().addAll(treeItems[i]);
}

root.setExpanded(true);
CheckboxTreeItem rootItem2 = new CheckboxTreeItem("child1");
final CheckboxTreeItem[] treeItems2 = new CheckboxTreeItem[6];

for (int i = 0; i < 6; i++) {
treeItems2[i] = new CheckboxTreeItem(""+i+"");
rootItem2.getChildren().addAll(treeItems2[i]);
}

cbTreeView.setRoot(rootItem);
cbTreeView.setCellFactory(CheckboxTreeCell.<String>forTreeView());
rootItem.getChildren().set(2,rootItem2);
cbTreeViewdisable(treeItems, 3);
//rest of code imports css and draws stage which is not relevant to my question
}

private void cbTreeViewdisable(final CheckboxTreeItem[] treeItems, final int id) {
treeItems[id].setIndependent(Boolean.TRUE);
treeItems[id].setValue(treeItems[id].getValue().toString()+" Note: you can't select this!)");
treeItems[id].selectedProperty().addListener(new ChangeListener<Boolean>() {

@Override
public void changed(ObservableValue<? extends Boolean> observable,
Boolean oldvalue, Boolean newvalue) {
Platform.runLater(new Runnable() {
@Override
public void run() {
treeItems[id].setSelected(Boolean.FALSE);
}

最佳答案

我提出了扩展 CheckBoxTreeItem 类的想法。我在那里添加了缺少的禁用属性:

import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.control.CheckBoxTreeItem;


public class CheckBoxTreeItemExt<T> extends CheckBoxTreeItem<T>
{
public SimpleBooleanProperty disabledProperty = new SimpleBooleanProperty(false);

public CheckBoxTreeItemExt(T t)
{
super(t);
}

public boolean isDisabled()
{
return disabledProperty.get();
}

public void setDisabled(boolean disabled)
{
disabledProperty.set(disabled);
}
}

然后我创建了一个 CheckBoxTreeCell 来监听新的 disabledProperty:

import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TreeItem;
import javafx.scene.control.cell.CheckBoxTreeCell;


public class CheckBoxTreeCellExt<T> extends CheckBoxTreeCell<T> implements ChangeListener<Boolean>
{
protected SimpleBooleanProperty linkedDisabledProperty;

@Override
public void updateItem(T item, boolean empty)
{
super.updateItem(item, empty);

if(item != null)
{
TreeItem<T> treeItem = treeItemProperty().getValue();
if(treeItem != null)
{
if(treeItem instanceof CheckBoxTreeItemExt<?>)
{
CheckBoxTreeItemExt<T> checkItem = (CheckBoxTreeItemExt<T>)treeItem;
if(checkItem != null)
{
if(linkedDisabledProperty != null)
{
linkedDisabledProperty.removeListener(this);
linkedDisabledProperty = null;
}

linkedDisabledProperty = checkItem.disabledProperty;
linkedDisabledProperty.addListener(this);

setDisable(linkedDisabledProperty.get());
}
}
}
}
}

@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldVal, Boolean newVal)
{
setDisable(newVal);
}
}

最后我们有了 CheckBoxTreeCellFactory:

import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeView;
import javafx.util.Callback;

public class CheckBoxTreeCellFactoryExt<T> implements Callback<TreeView<T>, TreeCell<T>>
{
@Override
public TreeCell<T> call(TreeView<T> tv)
{
return new CheckBoxTreeCellExt<T>();
}
}

关于javafx如何禁用checkboxTreeItem中的一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27121384/

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