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

惠州JavaFX树视图中的单元工厂是什么?_北大青鸟IT学校

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


导读:JavaFX树视图中的单元工厂是什么?相信学过Java的同学都遇到过这个问题,那么答案是什么呢?接下来一起来看看惠州北大青鸟老师是怎么回答的。

JavaFX树视图中的单元工厂是什么?相信学过Java的同学都遇到过这个问题,那么答案是什么呢?接下来一起来看看惠州北大青鸟老师是怎么回答的。

单元工厂可以向TreeView中的单个TreeItem添加具有特殊功能的TreeCell。


/*

 * 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.scene.Scene;

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("Isabella Johnson",

      "Accounts Department"), new Employee("Mike Graham", "IT Support"),

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

          "IT Support"));

  TreeItem<String> rootNode;

  public static void main(String[] args) {

    Application.launch(args);

  }

  public Main() {

    this.rootNode = new TreeItem<>("MyCompany Human Resources");

  }

  @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<String> 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;

    public TextFieldTreeCellImpl() {

    }

    @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());

        }

      }

    }

    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树视图4.png

想了解更多关于Java的资讯,可以来惠州北大青鸟新方舟校区了解一下。

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


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