首页 > 解决方案 > JList 仅显示 9 项

问题描述

在我的应用程序中,我使用带有 JScrollpane 的 JList 来显示操作日志。为此,我这样做:

 logModel = new DefaultListModel();
        logModel.ensureCapacity(300);
        logList = new JList(logModel);
        logList.setPreferredSize(new Dimension(300, 150));
        logList.setVisibleRowCount(6);
        JScrollPane sp = new JScrollPane(logList);
        sp.setHorizontalScrollBar(null);
        GridBagConstraints gbc_logList = new GridBagConstraints();
        gbc_logList.anchor = GridBagConstraints.WEST;
        gbc_logList.gridx = 0;
        gbc_logList.gridy = 6;
        gbc_logList.weightx = 1.0;
        gbc_logList.weighty = 0.5;
        gbc_logList.gridwidth = 3;
        pane.add(sp, gbc_logList);

但是,如果我开始添加项目,则列表仅显示最大值。列表中有 9 个项目。但是模型报告了正确尺寸的尺寸(如样本 11)我添加了一个序列,如

    private void createFolderSequence() {
        logModel.add(logModel.getSize(), "Create Folder: JNIFolder in root");
        int res = createFolder("JNIFolder", "/");
        logModel.add(logModel.getSize(), "Created: " + Integer.toString(res));
        
        logModel.add(logModel.getSize(), "Create Folder: JNIFolder2 in /JNIFolder/");
        res = createFolder("JNIFolder2", "/JNIFolder/");
        logModel.add(logModel.getSize(), "Created: " + Integer.toString(res));
        
        logModel.add(logModel.getSize(), "Rename Folder: JNIFolder2 to NIFolder3");
        res = renameFolder("/JNIFolder/JNIFolder2","JNIFolder3");
        logModel.add(logModel.getSize(), "Renamed: " + Integer.toString(res));
        
        logModel.add(logModel.getSize(), "Remove Folder: JNIFolder2");
        res = removeFolder("/JNIFolder/JNIFolder2");
        logModel.add(logModel.getSize(), "Removed: " + Integer.toString(res));
        System.out.println(logModel.getSize());
        
        logModel.add(logModel.getSize(), "Remove Folder: JNIFolder3");
        logModel.add(logModel.getSize(), "Remove Folder: JNIFolder3");
        res = removeFolder("/JNIFolder/JNIFolder3");
        logModel.add(logModel.getSize(), "Removed: " + Integer.toString(res));
        System.out.println(logModel.getSize()); //Print 11

    }

控制台最后显示 11 个,但列表中只有 9 个项目,如果我向下滚动也是如此。知道我做错了什么或错过了什么吗?

标签: javaswingjlist

解决方案


logList.setPreferredSize(new Dimension(300, 150));

不要硬编码首选大小。(删除该声明)。

您希望 JList 在从 ListModel 添加/删除项目时动态计算其首选大小。

然后将根据需要显示滚动条。


推荐阅读