这是我的代码
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
public class Main extends Application
{
private BorderPane root;
TreeView<String> tree;
@Override
public void start(Stage primaryStage) throws Exception
{
root = new BorderPane();
root.setLeft(getLeftHBox());
Scene scene = new Scene(root, 900, 500);
primaryStage.setTitle("JavaFx");
primaryStage.setScene(scene);
primaryStage.show();
}
private HBox getLeftHBox()
{
HBox hbox = new HBox();
Text text= new Text("Fall tree");
text.setFont(Font.font("Helvetica", FontWeight.BOLD,16));
VBox vbox =new VBox(10);
vbox.setPadding(new Insets(10));
TreeItem<String> Library,module,unite,translateA ,translateB,rotate;
//Root
Library = new TreeItem<>();
Library.setExpanded(true);
//module-Child of Root
module = makeBranch("module",Library);
makeBranch("Parameter X",module);
makeBranch("Parameter y",module);
//Unite-Child of module
unite = makeBranch("unite",module);
makeBranch("Parameter uX",unite);
makeBranch("Parameter uy",unite);
//TranslateA-Child of Unite
translateA = makeBranch("translateA",unite);
makeBranch("Parameter taX",translateA);
makeBranch("Parameter tay",translateA);
//TranslateB-Sibling of TranslateA
translateB = makeBranch("translateB",unite);
makeBranch("Parameter tbX",translateB);
makeBranch("Parameter tby",translateB);
//Rotate-Child of TranslateB
rotate = makeBranch("rotate",translateB);
makeBranch("Parameter RX",rotate);
makeBranch("Parameter RY",rotate);
tree= new TreeView<>(Library);
tree.setShowRoot(false);
vbox.getChildren().addAll(text,tree);
hbox.getChildren().addAll(vbox);
return hbox;
}
private TreeItem<String> makeBranch(String title, TreeItem<String> parent) {
TreeItem<String>item = new TreeItem<>(title);
item.setExpanded(true);
parent.getChildren().add(item);
return item;
}
public static void main(String[] args)
{
Application.launch(args);
}
}
在输出中我得到了秋天树/下拉菜单。我的问题是如何编辑输出中的名称。如何为输出中的分支提供新的标题/名称,并显示在我的代码中。
示例:当您执行程序时,我有一个分支名称&#34; module&#34;在输出之上。我想改变这个名字并写下#34; Rotate_Module&#34;在输出中。
(我可以简单地更改代码来执行此操作,但我想在输出中更改它,并且应该自动显示在我的代码中)
注意#我想更改每个名字。谢谢
答案 0 :(得分:1)
要使树可编辑,我认为您在此问题中的意思,您需要指定您希望树使用包含文本字段的单元格。你可以这样做:
tree.setEditable(true);
tree.setCellFactory(TextFieldTreeCell.forTreeView());
如果用户修改了树并进行了更改,那么这些更改将存储在TreeItem
的{{1}}中;即,您可以使用valueProperty()
等检索值
因此,为了使用户的更改持久化,您需要检索所有这些值,并在应用程序关闭时将它们保存到文件(或数据库或其他类型的持久存储)中。要使用这些值,请在启动应用程序时,从文件(或数据库等)中读取值,并在创建树项时使用这些值。