【发布时间】:2016-03-23 04:41:44
【问题描述】:
我编写了一个程序来选择文件并将它们添加到 JList。程序运行良好,将文件添加到列表的代码如下:
JPanel pane;
File newFile[];
static List<File> files = new ArrayList<File>();
static DefaultListModel<File> listModel = new DefaultListModel<>();
JList<File> fileList = new JList<>(listModel);
JPanel listPane = new JPanel();
pane.add(listPane, BorderLayout.CENTER);
listPane.setBackground(Color.LIGHT_GRAY);
listPane.setBorder(new EmptyBorder(0, 20, 0, 0));
listPane.setLayout(new BorderLayout());
listPane.add(fileList);
}
void getFile() {
final JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Select File...");
fc.setApproveButtonText("Select");
fc.setMultiSelectionEnabled(true);
int returnVal = fc.showOpenDialog(pane);
if (returnVal == JFileChooser.APPROVE_OPTION) {
newFile = fc.getSelectedFiles();
}
}
void setFile() {
int i = 0;
while (i < newFile.length) {
files.add(newFile[i]);
listModel.addElement(newFile[i]);
i++;
}
}
这是选择和添加文件的基本代码。所以现在我想在窗格上有一个滚动条,所以我将它修改为这样的 JScrollPane:
JScrollPane listPane = new JScrollPane();
pane.add(listPane, BorderLayout.CENTER);
listPane.setBackground(Color.LIGHT_GRAY);
listPane.setBorder(new EmptyBorder(0, 20, 0, 0));
listPane.setViewportView(fileList);
listPane.add(fileList);
}
所以一切都编译没有错误,但没有添加到 JScrollPane。我的理解是 JScrollPane 可以像普通的 JPanel 一样使用,只是它在溢出时会有滚动条。我在这里缺少关于 JScrollPanes 的一些东西吗?
【问题讨论】:
-
建议: 1) 在创建滚动窗格并将其添加到 GUI 时,将列表添加到滚动窗格。 2)此后,只处理(添加项目或从中删除)模型。 3)删除
static List<File> files = new ArrayList<File>();并直接从模型中获取任何信息或File。 4) 从static DefaultListModel<File> listModel = new DefaultListModel<>();中删除static前缀。静态很少是正确的解决方案(无论问题是什么)。 5) 为了尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
标签: java swing jscrollpane jlist defaultlistmodel