如何将java中的文件选择器限制为特定文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18575655/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to restrict file choosers in java to specific files
提问by julihx
private void openMenuActionPerformed(java.awt.event.ActionEvent evt) {
DBmanager db = new DBmanager();
if (!db.getCurrentUser().equals("Admin")) {
JOptionPane.showMessageDialog(this, "You are Not Allowed to Run Applications");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PDF Documents", "pdf"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("MS Office Documents", "docx", "xlsx", "pptx"));
fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
fileChooser.setAcceptAllFileFilterUsed(false);
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().open(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (db.getCurrentUser().equals("Admin")) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setAcceptAllFileFilterUsed(true);
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().open(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}// TODO add your handling code here:
}
Hi guys....I'm trying to filter files in a file filter by setting fileChooser.setAcceptAllFileFilterUsed(false);
. The "all files" option disappears from the FileChooser
but all files remain visible unless you select an option from PDF documents,ms Office or images.I want to have only my 3 custom filters upon opening the file chooser.
大家好....我正在尝试通过设置过滤文件过滤器中的文件fileChooser.setAcceptAllFileFilterUsed(false);
。“所有文件”选项从 中消失,FileChooser
但所有文件仍然可见,除非您从 PDF 文档、MS Office 或图像中选择一个选项。我只想在打开文件选择器时使用我的 3 个自定义过滤器。
采纳答案by Josh M
For example, if you want to filter your JFileChooser
to strictly display most commonly found image files, you would use something like this:
例如,如果你想过滤你的JFileChooser
以严格显示最常见的图像文件,你可以使用这样的东西:
FileNameExtensionFilter filter = new FileNameExtensionFilter("Image Files", "jpg", "png", "gif", "jpeg");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(filter);
The first argument is the description (what gets displayed upon selection at the bottom) and the second argument are the informal file extensions.
第一个参数是描述(在底部选择时显示的内容),第二个参数是非正式的文件扩展名。
回答by Grodriguez
You can use FileNameExtensionFilter
to add allowed extensions to your FileChooser
dialog. Here's an example:
您可以使用FileNameExtensionFilter
将允许的扩展添加到FileChooser
对话框中。下面是一个例子:
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
For more info, please refer to the Javadocs: FileNameExtensionFilter
有关更多信息,请参阅 Javadocs:FileNameExtensionFilter
回答by Nguy?n Minh V?
In my case, I had to put the
就我而言,我不得不把
setFileFilter(
new FileNameExtensionFilter("Default file filter", ...)
);
after all other calls to the method
在对该方法的所有其他调用之后
addChoosableFileFilter(...);
to make setAcceptAllFileFilterUsed(false) works.
使 setAcceptAllFileFilterUsed(false) 起作用。
回答by Suma
This works fine in java8.1
这在 java8.1 中工作正常
JFileChooser dbfilechooser = new JFileChooser();
FileNameExtensionFilter filter1 =
new FileNameExtensionFilter("xls","xls");
FileNameExtensionFilter filter2 =
new FileNameExtensionFilter("xlsx", "xlsx");
FileNameExtensionFilter filter3 =
new FileNameExtensionFilter("csv", "csv");
dbfilechooser.addChoosableFileFilter(filter1);
dbfilechooser.addChoosableFileFilter(filter2);
dbfilechooser.addChoosableFileFilter(filter3);