java - 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 个项目,如果我向下滚动也是如此。知道我做错了什么或错过了什么吗?
解决方案
logList.setPreferredSize(new Dimension(300, 150));
不要硬编码首选大小。(删除该声明)。
您希望 JList 在从 ListModel 添加/删除项目时动态计算其首选大小。
然后将根据需要显示滚动条。
推荐阅读
- java - 多个表如何在单个查询中获取数据
- python - 特殊过滤器熊猫数据框
- android - 我应该替换片段还是修改当前片段?
- python - 进程在后台运行时在 kivy 中显示某些内容
- c# - GoogleAnalyticsTracker 为 winforms 应用程序创建独特的会话
- powershell - WMI 返回非活动笔记本电脑显示器的分辨率
- linux - Ansible 任务写入本地日志文件
- visual-studio-code - 如何通过 Google Chrom 扩展在浏览器脚本中调试 Nuxt
- api - React Native API Fetch 没有完全发生。映射时抛出错误
- c++ - 我无法使用 c++(代码块)中的 fstream 将文件内容复制到另一个。如何运行该文件?