Java 将带有getter和setter的变量添加到现有类中

Java 将带有getter和setter的变量添加到现有类中,java,javafx,Java,Javafx,我正试图使用TreeView制作一个程序,但我需要 TreeItem类型的每个对象都包含一个名为CanEdit 还有一个setter为setCanEdit()和一个getter为getCanEdit() 如何将这些东西添加到TreeItem类中?您可以创建一个扩展TreeItem的新类,并使用它 class MyTreeItem extends TreeItem { public setCanEdit(...) ... public getCanEdit() ... } 当然

我正试图使用
TreeView
制作一个程序,但我需要
TreeItem
类型的每个对象都包含一个名为
CanEdit

还有一个setter为
setCanEdit()
和一个getter为
getCanEdit()


如何将这些东西添加到
TreeItem
类中?

您可以创建一个扩展
TreeItem
的新类,并使用它

class MyTreeItem extends TreeItem {
    public setCanEdit(...) ... 
    public getCanEdit() ...
}
当然,您需要创建适当的构造函数,并在需要时委托给super


要使用它,只需确保您的所有节点都属于此类型,例如,
newtreeview(newmytreeitem(…)
您需要扩展TreeItem

public class EditableTreeItem<T> extends TreeItem<T>{
    private boolean canEdit;
    public void setCanEdit(boolean canEdit){this.canEdit = canEdit;}
    public boolean getCanEdit(){return this.canEdit;}
}
公共类EditableTreeItem扩展了TreeItem{
私有布尔canEdit;
public void setCanEdit(布尔canEdit){this.canEdit=canEdit;}
公共布尔getCanEdit(){返回this.canEdit;}
}
像这样使用它:

TreeItem<String> root = new TreeItem<String>("Tree Root");
root.getChildren().addAll(
    new EditableTreeItem<String>("Item 1"),
    new EditableTreeItem<String>("Item 2"),
    new EditableTreeItem<String>("Item 3")
);
TreeItem root=新的TreeItem(“树根”);
root.getChildren().addAll(
新的EditableTreeItem(“第1项”),
新的EditableTreeItem(“第2项”),
新的EditableTreeItem(“第3项”)
);

希望您可以将其添加到现有的TreeView中,但为了正确处理新类,您可能也必须扩展它。

只需扩展TreeItem即可


在您的树视图中可以使用您的OwnTreeItem,包括getter和setter的所需属性。

TreeItem是您定义的类还是来自任何库的类?@Alexander Romanov它来自JavaFX库,具体来说,javafx.scene.control.TreeItem。不清楚您为什么需要它。为什么不把布尔值放在由树项包装的对象中呢?你能更全面地解释一下你想做什么吗?@James\u我明白你的意思,但现在我的重点是试图从特定的树中获取树单元格,使其不可编辑:/n你无法从特定的树项目中获取树单元格。树项目甚至可能不在单元格中表示(例如,如果其父项已折叠,或已从屏幕上滚动)。您应该实现一个自定义树单元并调用
setEditable(…)
(更可能是)
updateItem(…)
updateTreeItem(…)
方法,这取决于您实际需要什么。我尝试了这样的方法,但是我有一个错误,关于我如何不能强制转换到它你不需要强制转换,因为你已经有了正确的类型。只需使用EditableTreeItem代替TreeItem即可。查看我的编辑,包括泛型类型参数。从树中检索项目时可能需要强制转换,例如
EditableTreeItem selected=(EditableTreeItem)tree.getSelectionModel().getSelectedItem()
我尝试过这样的方法,但是我得到一个错误,关于如何不能从TreeItem转换到我的子类TreeBranch rootItem=((TreeBranch)newtreeitem(“Test”)@没有啊?你为什么要对构建的结果进行强制转换?@James_D我希望treeview具有布尔值的原因是,它的自定义TreeCell将知道天气,或者不允许用户编辑它,所以我需要能够设置这个变量,如果我在TreeCell中强制转换它,它会不会被设置为默认值?@NoPeope树视图不是已经提供了现成的功能吗?(听起来你需要阅读一些继承和强制转换的基础知识。强制转换不会改变任何东西的价值。)你不能扩展
TreeView
来实现这一点:例如
setRoot(TreeItem)
TreeItem getRoot()
方法是最终的。好的,谢谢!我相应地改变了答案。我认为其他答案更能说明问题:)