我希望我的JFileChooser
允许多个文件选择,但限制可同时选择的文件数。更改JFileChooser中的选定文件以响应事件
理想情况下,我想实时约束选择,优先考虑最近选择的文件,即当选择第三个文件时,第一个文件(即最早选择的文件)应该是自动取消选择。
我认为一个PropertyChangeListener
像这样的会工作:
public static void main(String[] args) throws IOException {
final JFileChooser fc = new JFileChooser(didir);
fc.setMultiSelectionEnabled(true);
fc.addPropertyChangeListener(new PropertyChangeListener() {
private final Set<File> selected = Sets.newLinkedHashSet();
public void propertyChange(PropertyChangeEvent evt) {
if (JFileChooser.SELECTED_FILES_CHANGED_PROPERTY.equals(evt.getPropertyName())) {
File[] selectedFiles = fc.getSelectedFiles();
if (selectedFiles.length > 2) {
selected.addAll(Arrays.asList(selectedFiles));
int numToRemove = Math.max(0, selected.size() - 2);
Iterables.removeIf(Iterables.limit(selected, numToRemove),
Predicates.alwaysTrue());
fc.setSelectedFiles(selected.toArray(new File[0]));
}
}
}
});
fc.showOpenDialog(null);
}
但是调用fc.setSelectedFiles()
有没有影响(虽然它触发一个事件,它不更新列表中选择。)
有没有办法在JFileChooser
打开时以编程方式强制更改选择?还是有另一种方法来限制选择的大小?
感谢更简单的实现,但这不能解决问题。像我的版本一样,它适用于Metal或Windows外观,但不适用于Macintosh。 – finnw 2011-02-15 13:33:34