JFileChooser
複数のファイルを選択できるようにしたいのですが、同時に選択できるファイルの数に制限があります。
理想的には、最も最近選択されたファイルを優先して、リアルタイムで選択を制限したいと思います。つまり、3番目のファイルが選択された場合、1番目のファイル(つまり、最も早く選択されたファイル)が自動的に選択解除されます。
私は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
ますか?または、選択範囲のサイズを制限する別の方法はありますか?