gpt4 book ai didi

java - 更改 JFileChooser 中的选定文件以响应事件

转载 作者:行者123 更新时间:2023-12-05 00:11:22 26 4
gpt4 key购买 nike

我希望我的 JFileChooser 允许选择多个文件,但对可以同时选择的文件数量有限制。

Ideally I would like to constrain the selection in real-time, with priority given to the most-recently selected file, i.e. when a 3rd file is selected, the 1st file (i.e the one that was selected earliest) should be deselected自动。

我认为像这样的 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 打开时以编程方式强制更改选择?还是有另一种方法来限制选择的大小?

最佳答案

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;

import javax.swing.JFileChooser;

public class MyClass {
final static JFileChooser fc = new JFileChooser("/");
public static void main(String[] args) throws IOException {
fc.setMultiSelectionEnabled(true);
fc.addPropertyChangeListener(new ChangeListener());
fc.showOpenDialog(null);
}

private static class ChangeListener implements PropertyChangeListener{
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (JFileChooser.SELECTED_FILES_CHANGED_PROPERTY.equals(evt.getPropertyName())) {
File[] selectedFiles = fc.getSelectedFiles();
File[] allowedFiles = new File[2];
if (selectedFiles.length > 2) {
allowedFiles[0] = selectedFiles[1];
allowedFiles[1] = selectedFiles[0];

fc.setSelectedFiles(allowedFiles);
}
}
}
}
}

关于java - 更改 JFileChooser 中的选定文件以响应事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com