Я бы хотел, чтобы мой 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
открыто? Или есть другой способ ограничить размер выделения?