java - ArrayList显示不正确

标签 java arraylist javafx

我正在测试将数组列表显示到 JavaFX Accordion 中:

public class Navigation {

    // Object for storing conenctions
    public static List<dataObj> list = new ArrayList<>();
    private ObservableList<dataObj> data;

    public class dataObj {

        private String conenctionname;

        public dataObj(String conenctionname) {
            this.conenctionname = conenctionname;
        }

        public String getConenctionname() {
            return conenctionname;
        }

        public void setConenctionname(String conenctionname) {
            this.conenctionname = conenctionname;
        }
    }

    public void initNavigation(Stage primaryStage, Group root, Scene scene) {

        VBox stackedTitledPanes = createStackedTitledPanes();

        ScrollPane scroll = makeScrollable(stackedTitledPanes);
        scroll.getStyleClass().add("stacked-titled-panes-scroll-pane");
        scroll.setPrefSize(395, 580);
        scroll.setLayoutX(5);
        scroll.setLayoutY(32);

        root.getChildren().add(scroll);

    }

    private ScrollPane makeScrollable(final VBox node) {
        final ScrollPane scroll = new ScrollPane();
        scroll.setContent(node);
        scroll.viewportBoundsProperty().addListener(new ChangeListener<Bounds>() {
            @Override
            public void changed(ObservableValue<? extends Bounds> ov, Bounds oldBounds, Bounds bounds) {
                node.setPrefWidth(bounds.getWidth());
            }
        });
        return scroll;
    }

    /////////////////////////////////////////////////////////////////////////////////////
    // Generate accordition with Connections, Tables and Description
    private VBox createStackedTitledPanes() {
        VBox stackedTitledPanes = new VBox();
        stackedTitledPanes.getChildren().setAll(
                createConnectionsList("Connections"));
        ((TitledPane) stackedTitledPanes.getChildren().get(0)).setExpanded(true);
        stackedTitledPanes.getStyleClass().add("stacked-titled-panes");

        return stackedTitledPanes;
    }

    //////////////////////////////////////////////////////////////////////////////
    // Generate list with Connections
    public TitledPane createConnectionsList(String title) {

        initObject();

        data = FXCollections.observableArrayList(list);

        ListView<dataObj> lv = new ListView<>(data);

        lv.setCellFactory(new Callback<ListView<dataObj>, ListCell<dataObj>>() {
            @Override
            public ListCell<dataObj> call(ListView<dataObj> p) {
                return new ConnectionsCellFactory();
            }
        });
        AnchorPane content = new AnchorPane();
        content.getChildren().add(lv);
        // add to TitelPane
        TitledPane pane = new TitledPane(title, content);
        return pane;
    }

    static class ConnectionsCellFactory extends ListCell<dataObj> {

        @Override
        public void updateItem(dataObj item, boolean empty) {
            super.updateItem(item, empty);
            if (item != null) {

                for (int i = 0; i < list.size(); i++) {
                    setText(list.get(i).getConenctionname());
                }



            }
        }
    }

    // Insert Some test data
    public void initObject() {

        dataObj test1 = new dataObj("test data 1");
        dataObj test2 = new dataObj("test data 2");

        list.add(test1);
        list.add(test2);

    }
}

但由于某种原因,我无法从数组列表中获取正确的对象列表并显示它们。我得到这个结果:

enter image description here

正确的结果应该是测试数据1测试数据2。我该如何解决这个问题?

最佳答案

问题出在 ConnectionsCellFactory 中,为 List 中的每个项目调用 updateItem 方法。因此,在您的代码中,对于每个单元格,您都为列表中的每个项目设置文本

你应该尝试:

static class ConnectionsCellFactory extends ListCell<dataObj> {

    @Override
    public void updateItem(dataObj item, boolean empty) {
        super.updateItem(item, empty);
        if (item != null) {
            setText(item.getConenctionname());
        }
    }
}

关于java - ArrayList显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16192871/

相关文章:

java - hibernate hql getMaxVersion

java - 循环遍历具有相同属性 (catalog_id) 的项目出现情况

java - 自动完成 ArrayList 声明

java - 在 JavaFX 中显示 pdf

java - 在 J2ME 中将 RSAPrivateCrtKeyParameters/RSAKeyParameters 转换为 PEM

java - Robot 的 getPixelColor(int x, int y) 方法如何工作?

java - Mvel的编译表达式如何存储在数据库中

java - 如何在不返回 size = 0 的情况下获取 ArrayList 的值?

linux - JavaFX 应用程序包版本号

java - 将图像加载到 ImageView JavaFX