广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州JavaFX树视图中的新树项目按需是什么?_北大青鸟IT学校

作者:邓华发布时间:2021-05-20分类:Java技术浏览:826


导读:JavaFX树视图中的新树项目按需是什么?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

JavaFX树视图中的新树项目按需是什么?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

/*

 * Copyright (c) 2008, 2014, Oracle and/or its affiliates.

 * All rights reserved. Use is subject to license terms.

 *

 * This file is available and licensed under the following license:

 *

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions

 * are met:

 *

 *  - Redistributions of source code must retain the above copyright

 *    notice, this list of conditions and the following disclaimer.

 *  - Redistributions in binary form must reproduce the above copyright

 *    notice, this list of conditions and the following disclaimer in

 *    the documentation and/or other materials provided with the distribution.

 *  - Neither the name of Oracle nor the names of its

 *    contributors may be used to endorse or promote products derived

 *    from this software without specific prior written permission.

 *

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 */

import java.util.Arrays;

import java.util.List;

import javafx.application.Application;

import javafx.beans.property.SimpleStringProperty;

import javafx.event.ActionEvent;

import javafx.scene.Scene;

import javafx.scene.control.ContextMenu;

import javafx.scene.control.MenuItem;

import javafx.scene.control.TextField;

import javafx.scene.control.TreeCell;

import javafx.scene.control.TreeItem;

import javafx.scene.control.TreeView;

import javafx.scene.input.KeyCode;

import javafx.scene.input.KeyEvent;

import javafx.scene.layout.VBox;

import javafx.scene.paint.Color;

import javafx.stage.Stage;

public class Main extends Application {

    List<Employee> employees = Arrays.<Employee>asList(

            new Employee("Jacob Smith", "Accounts Department"),

            new Employee("Judy Mayer", "IT Support"),

            new Employee("Gregory Smith", "IT Support"));

    TreeItem<String> rootNode = 

        new TreeItem<>("MyCompany Human Resources");

    public static void main(String[] args) {

        Application.launch(args);

    }

    @Override

    public void start(Stage stage) {

        rootNode.setExpanded(true);

        for (Employee employee : employees) {

            TreeItem<String> empLeaf = new TreeItem<>(employee.getName());

            boolean found = false;

            for (TreeItem<String> depNode : rootNode.getChildren()) {

                if (depNode.getValue().contentEquals(employee.getDepartment())){

                    depNode.getChildren().add(empLeaf);

                    found = true;

                    break;

                }

            }

            if (!found) {

                TreeItem depNode = new TreeItem(employee.getDepartment());

                rootNode.getChildren().add(depNode);

                depNode.getChildren().add(empLeaf);

            }

        }

        stage.setTitle("Tree View Sample");

        VBox box = new VBox();

        final Scene scene = new Scene(box, 400, 300);

        scene.setFill(Color.LIGHTGRAY);

        TreeView<String> treeView = new TreeView<>(rootNode);

        treeView.setEditable(true);

        treeView.setCellFactory((TreeView<String> p) -> 

            new TextFieldTreeCellImpl());

        box.getChildren().add(treeView);

        stage.setScene(scene);

        stage.show();

    }

    private final class TextFieldTreeCellImpl extends TreeCell<String> {

        private TextField textField;

        private final ContextMenu addMenu = new ContextMenu();

        public TextFieldTreeCellImpl() {

            MenuItem addMenuItem = new MenuItem("Add Employee");

            addMenu.getItems().add(addMenuItem);

            addMenuItem.setOnAction((ActionEvent t) -> {

                TreeItem newEmployee = 

                    new TreeItem<>("New Employee");

                getTreeItem().getChildren().add(newEmployee);

            });

        }

        @Override

        public void startEdit() {

            super.startEdit();

            if (textField == null) {

                createTextField();

            }

            setText(null);

            setGraphic(textField);

            textField.selectAll();

        }

        @Override

        public void cancelEdit() {

            super.cancelEdit();

            setText((String) getItem());

            setGraphic(getTreeItem().getGraphic());

        }

        @Override

        public void updateItem(String item, boolean empty) {

            super.updateItem(item, empty);

            if (empty) {

                setText(null);

                setGraphic(null);

            } else {

                if (isEditing()) {

                    if (textField != null) {

                        textField.setText(getString());

                    }

                    setText(null);

                    setGraphic(textField);

                } else {

                    setText(getString());

                    setGraphic(getTreeItem().getGraphic());

                    if (

                        !getTreeItem().isLeaf()&&getTreeItem().getParent()!= null

                    ){

                        setContextMenu(addMenu);

                    }

                }

            }

        }

        private void createTextField() {

            textField = new TextField(getString());

            textField.setOnKeyReleased((KeyEvent t) -> {

                if (t.getCode() == KeyCode.ENTER) {

                    commitEdit(textField.getText());

                } else if (t.getCode() == KeyCode.ESCAPE) {

                    cancelEdit();

                }

            });  

        }

        private String getString() {

            return getItem() == null ? "" : getItem().toString();

        }

    }

    public static class Employee {

        private final SimpleStringProperty name;

        private final SimpleStringProperty department;

        private Employee(String name, String department) {

            this.name = new SimpleStringProperty(name);

            this.department = new SimpleStringProperty(department);

        }

        public String getName() {

            return name.get();

        }

        public void setName(String fName) {

            name.set(fName);

        }

        public String getDepartment() {

            return department.get();

        }

        public void setDepartment(String fName) {

            department.set(fName);

        }

    }

}

上面的代码生成以下结果。

JavaFX树视图3.png

想学Java的同学们,可以来惠州北大青鸟新方舟校区详细了解。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学 校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表