[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    How to use CheckBoxTreeItem instead TreeItem in TreeTable view with progressbar?
From:       Navdeep Singh Sidhu <navdeepsingh.sidhu95 () gmail ! com>
Date:       2015-03-27 12:34:21
Message-ID: CACn=thaaMyCc5cu6n5AP0fto3sk2iyE+c9pi8KmJKev2EcygdQ () mail ! gmail ! com
[Download RAW message or body]

I am experimenting with JavaFX and I am trying to add a check box Item in
tree table, but it looks like it supports only simple tree item.

My Code is modified version of [Oracle's TreeTableView Example][1]:

     public class TreeTableViewSample extends Application implements
Runnable {

    List<Employee> employees = Arrays.<Employee>asList(
            new Employee("Ethan Williams", 30.0),
            new Employee("Emma Jones", 10.0),
            new Employee("Michael Brown", 70.0),
            new Employee("Anna Black", 50.0),
            new Employee("Rodger York", 20.0),
            new Employee("Susan Collins", 70.0));

    /*  private final ImageView depIcon = new ImageView (
     new Image(getClass().getResourceAsStream("department.png"))
     );
     */
    final CheckBoxTreeItem<Employee> root
            = new CheckBoxTreeItem<>(new Employee("Sales Department", 0.0));
    final CheckBoxTreeItem<Employee> root2
            = new CheckBoxTreeItem<>(new Employee("Departments", 0.0));

    public static void main(String[] args) {
        Application.launch(TreeTableViewSample.class, args);
    }

    @Override
    public void start(Stage stage) {
        root.setExpanded(true);
        employees.stream().forEach((employee) -> {
            root.getChildren().add(new CheckBoxTreeItem<>(employee));
        });
        stage.setTitle("Tree Table View Sample");
        final Scene scene = new Scene(new Group(), 400, 400);
        scene.setFill(Color.LIGHTGRAY);
        Group sceneRoot = (Group) scene.getRoot();

        TreeTableColumn<Employee, String> empColumn
                = new TreeTableColumn<>("Employee");
        empColumn.setPrefWidth(150);
        empColumn.setCellValueFactory(
                (TreeTableColumn.CellDataFeatures<Employee, String> param)
                -> new
ReadOnlyStringWrapper(param.getValue().getValue().getName())
        );

        TreeTableColumn<Employee, Double> salaryColumn
                = new TreeTableColumn<>("Salary");
        salaryColumn.setPrefWidth(190);
        /*   salaryColumn.setCellValueFactory(
         (TreeTableColumn.CellDataFeatures<Employee, String> param) ->
         new ReadOnlyDoubleWrapper(param.getValue().getValue().getEmail())
         );
         */

salaryColumn.setCellFactory(ProgressBarTreeTableCell.<Employee>forTreeTableColumn());
        root2.getChildren().add(root);

        TreeTableView<Employee> treeTableView = new TreeTableView<>(root2);
        treeTableView.getColumns().setAll(empColumn, salaryColumn);
        sceneRoot.getChildren().add(treeTableView);
        stage.setScene(scene);
        stage.show();
        ScheduledExecutorService executorService =
Executors.newScheduledThreadPool(1);
        executorService.scheduleAtFixedRate(this, 3, 10, TimeUnit.SECONDS);

    }

    @Override
    public void run() {
        root2.getValue().setSalary(calcSalary(root));
    }

    public double calcSalary(TreeItem<Employee> t) {
        Double salary = 0.0;
        if (!t.isLeaf()) {

            ObservableList<TreeItem<Employee>> al = t.getChildren();
            for (int i = 0; i < al.size(); i++) {
                TreeItem<Employee> get = al.get(i);
                salary += calcSalary(get);
            }
            t.getValue().setSalary(salary);
        }
        return salary += t.getValue().getSalary();
    }

    public class Employee {

        private SimpleStringProperty name;
        private SimpleDoubleProperty salary;

        public SimpleStringProperty nameProperty() {
            if (name == null) {
                name = new SimpleStringProperty(this, "name");
            }
            return name;
        }

        public SimpleDoubleProperty salaryProperty() {
            if (salary == null) {
                salary = new SimpleDoubleProperty(this, "salary");
            }
            return salary;
        }

        private Employee(String name, Double salary) {
            this.name = new SimpleStringProperty(name);
            this.salary = new SimpleDoubleProperty(salary);
        }

        public String getName() {
            return name.get();
        }

        public void setName(String fName) {
            name.set(fName);
        }

        public Double getSalary() {
            return salary.get();
        }

        public void setSalary(Double fName) {
            salary.set(fName);
        }
    }
    }



Is there any way i can use checkboxes for tree item in the above example? I
am using JavaFx 8.

I am also try to create Salary Bars, which can also be used as progressbar
for a task and its sub tasks. (Just playing with UI). But don't know how to
connect them with the real values of employe, as i guess normal table view
is different from tree table view. Thanks ! :)

  [1]:
https://docs.oracle.com/javase/8/javafx/user-interface-tutorial/tree-table-view.htm

-- 
Regards
Navdeep Singh Sidhu
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic