Есть ли проблема в Java ListView? - PullRequest
       0

Есть ли проблема в Java ListView?

0 голосов
/ 27 декабря 2018

У меня аномалия с фабрикой ячеек java ListView.У меня есть оператор if , который просто оценивает, равен ли элемент ячейки другому, если это так, тогда я просто изменяю цвет текста ячейки.Но по странной причине, после того, как я добавляю новый элемент в ListView, другие ячейки (я) или элемент (ы) удовлетворяют условию, так что в результате получается много ячеек с измененным цветом против моей воли.

Я использую JFXListView пользовательский ListView из библиотеки JFoenix Material Design.Также у меня была такая же проблема и раньше, но при изменении значения свойства disable, когда я прокручивал просмотр списка, произошла та же самая аномалия!Одна ячейка, которая не была отключена, была отключена после прокрутки (элемент был скрыт при прокрутке, и когда он перестал скрываться, аномалия стала проявляться (ячейка отключалась против моей воли).

zoneListView.setCellFactory(listSelectionView ->
        {
            ListCell<String> cell = new ListCell<String>() {
                @Override
                public void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);

                    if (empty) {
                        setText(null);
                        setGraphic(null);
                    } else {
                        setOnDragEntered(event -> setTextFill(Color.DARKRED));
                        setOnDragExited(event -> setTextFill(Color.BLACK));

                        setOnDragOver(event -> {
                            if (event.getGestureSource() != this &&
                                    event.getDragboard().hasString()) {
                                event.acceptTransferModes(TransferMode.MOVE);
                            }

                            event.consume();
                        });

                        setOnDragDropped(event ->
                        {
                            if (getItem() == null) {
                                return;
                            }

                            Dragboard db = event.getDragboard();
                            boolean success = false;
                            if (db.hasString()) {
                                int index = Integer.valueOf(db.getString());
                                XBeeNode node = nodeListView.getItems().get(index);
                                if (node != null) {
                                    if (!node.getZone().equals(getItem())) {
                                        String actual_zone = node.getZone();
                                        if (!changedNodes.containsKey(node)) {
                                            changedNodes.put(node, node.getZone());
                                            System.out.println(changedNodes.toString());
                                        }
                                        node.getZone();
                                        node.setZone(getItem());
                                        NodesFilteredList.setPredicate(data ->
                                        {
                                            if (actual_zone == null || actual_zone.isEmpty())
                                                return true;
                                            if (actual_zone.equals("*"))
                                                return true;
                                            else if ((data.getZone().equals(actual_zone) ))
                                                return true;
                                            else if (data.getZone().endsWith(actual_zone))
                                                return true;
                                            else return false;
                                        });
                                    }

                                }
                                success = true;
                            }
                            /* let the source know whether the string was successfully
                             * transferred and used */
                            event.setDropCompleted(success);

                            event.consume();
                        });

                        if (item.equals("*"))
                            setTextFill(Color.RED); // Here is where change the text color

                        setText(item == null ? "null" : item.toString());
                        setGraphic(null);
                    }
                }
            };
            cell.setOnDragDone(DragEvent::consume);

            return cell;
        })

Итак, у меня есть следующие пункты списка инициализации:

  1. *
  2. A
  3. Z00

В начале только первый элемент («*») имеет красный цвет текста. Но, как я уже говорил, после добавления нового элемента другая ячейка меняет свой цвет.

Пример проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...