Java ListView中有问题吗?

时间:2018-12-27 18:55:14

标签: java listview javafx

我在Java ListView单元工厂中出现异常。我有一个 if 语句,它仅评估一个单元格项是否与其他项相等(如果相等),那么我只是更改该单元格的文本颜色。但是出于一个奇怪的原因,在我向ListView添加新元素后,其他单元格或项目均满足条件,因此结果是许多单元格的颜色违背了我的意愿。

我正在使用JFoenix材质设计库中的JFXListView自定义ListView。 我之前也遇到过同样的问题,但是更改了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

在开始时,只有第一项(“ *”)具有红色文本颜色。但是正如我之前说的,添加新元素后,另一个单元格会更改其颜色。

Sample of the problem

0 个答案:

没有答案