如何在javafx中编辑/更改输出中的名称

时间:2017-04-20 13:37:15

标签: javafx

这是我的代码

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;在输出中。

(我可以简单地更改代码来执行此操作,但我想在输出中更改它,并且应该自动显示在我的代码中)

注意#我想更改每个名字。谢谢

1 个答案:

答案 0 :(得分:1)

要使树可编辑,我认为您在此问题中的意思,您需要指定您希望树使用包含文本字段的单元格。你可以这样做:

tree.setEditable(true);
tree.setCellFactory(TextFieldTreeCell.forTreeView());

如果用户修改了树并进行了更改,那么这些更改将存储在TreeItem的{​​{1}}中;即,您可以使用valueProperty()等检索值

因此,为了使用户的更改持久化,您需要检索所有这些值,并在应用程序关闭时将它们保存到文件(或数据库或其他类型的持久存储)中。要使用这些值,请在启动应用程序时,从文件(或数据库等)中读取值,并在创建树项时使用这些值。