Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / перемещение selectedTreeItem ноды при удалении child в колапснутом дереве / 1 сообщений из 1, страница 1 из 1
23.02.2018, 17:19
    #39606588
DNShark
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перемещение selectedTreeItem ноды при удалении child в колапснутом дереве
Делюсь багом. Сегодня откопал. Есть тестовый код.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBoxTreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.control.cell.CheckBoxTreeCell;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    static class DummyFilterable {
        private String value;

        DummyFilterable(String value) {
            this.value = value;
        }

        @Override
        public String toString() {
            return value.toString();
        }
    }

    public static final int NODE_COUNT = 10;

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Tree View Sample");
        TreeView<DummyFilterable> tree = new TreeView(new CheckBoxTreeItem(new DummyFilterable("root")));
        tree.getRoot().setExpanded(true);
        fillTree2(tree);
        StackPane root = new StackPane();
        VBox vBox = new VBox();
        vBox.getChildren().add(tree);
        Button button = new Button("Start");
        button.setOnAction(event -> {
            if (expandMe.getChildren().contains(removed)) {
                expandMe.getChildren().remove(removed);
            } else {
                expandMe.getChildren().add(removed);
            }
        });
        vBox.getChildren().add(button);
        root.getChildren().add(vBox);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }


    private CheckBoxTreeItem<DummyFilterable> expandMe = new CheckBoxTreeItem(new DummyFilterable("expandMe"));
    private CheckBoxTreeItem<DummyFilterable> removed = new CheckBoxTreeItem(new DummyFilterable("removed"));

    private void fillTree2(TreeView<DummyFilterable> treeView) {
        treeView.setCellFactory(p -> new CheckBoxTreeCell());
        CheckBoxTreeItem checkBoxTreeItem = null;
        for (int i = 0; i < NODE_COUNT; i++) {
            checkBoxTreeItem = new CheckBoxTreeItem<>(new DummyFilterable("folder" + i));
            treeView.getRoot().getChildren().add(checkBoxTreeItem);
        }
        checkBoxTreeItem = new CheckBoxTreeItem<>(new DummyFilterable("colapseMe"));
        treeView.getRoot().getChildren().add(checkBoxTreeItem);
        checkBoxTreeItem.getChildren().add(expandMe);
        expandMe.getChildren().add(removed);
        expandMe.setExpanded(true);
    }

    public static void main(String... args) {
        launch(args);
    }
}



Когда удаляешь ноду removed (нажатием на start) при колапснутой ноде colapseMe и експанднутой expandMe. Селект смещается вверх на 1. Судя по коду не правильно щитается shift в TreeView в treeItemListener (
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / перемещение selectedTreeItem ноды при удалении child в колапснутом дереве / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]