Фильтры JFileChooser
Я помещаю JFileChooser
в свою программу, но это только принимает изображения. Поэтому я решил добавить фильтры:
код
import javax.swing.*;
public class fileChooser {
public static void main(String[] args) {
JPanel panel = new JPanel();
final JFileChooser fc = new JFileChooser();
int file = fc.showOpenDialog(panel);
fc.addChoosableFileFilter(new ImageFilter());
fc.setAcceptAllFileFilterUsed(false);
}
}
Я получил это прямо из учебников Java. Но Eclipse подчеркивает следующее как ошибку:
fc.addChoosableFileFilter(new ImageFilter());
fc.setAcceptAllFileFilterUsed(false);
Любые предложения?
Ответы
Ответ 1
Я помещаю JFileChooser в свою программу, но это только принимает изображения.
Для списка типов, поддерживаемых этой JRE на этой ОС, используйте ImageIO
.
FileFilter imageFilter = new FileNameExtensionFilter(
"Image files", ImageIO.getReaderFileSuffixes());
Виды - Java 1.6/Windows 7
bmp
jpg
jpeg
wbmp
png
gif
Примечание: не перекодируйте этот список! Он может меняться от версии к версии и от ОС к ОС. НАПРИМЕР.
- Я не удивлен тем, что Windows поддерживает загрузку BMP, но выходит ли это на Mac?
- Видя WBMP предупредил меня о существовании такого формата!
В этом списке будет много других форматов, если jai.
Фильтр, как он отображается в выборе
![Image Chooser]()
Ответ 2
аргумент fc.addChoosableFileFilter()
должен быть подклассом javax.swing.filechooser.FileFilter
. Например, вы можете изменить свой код как
fc.addChoosableFileFilter(new FileNameExtensionFilter("Image Files", "jpg", "png", "tif");
Ответ 3
Я использую setFileFilter().
Мой код ниже (JAVA-JSE 1.6)
JFileChooser c = new JFileChooser();
//Setting Up The Filter
FileFilter imageFilter = new FileNameExtensionFilter(
"Image files", ImageIO.getReaderFileSuffixes());
//Attaching Filter to JFileChooser object
c.setFileFilter(imageFilter);
//Displaying Filechooser
int rVal = c.showOpenDialog(new JPanel());
Ответ 4
Вы используете неправильный класс ImageFiler: -)
ImageFilter из учебника не из пакета java.awt, который вы импортируете.
Этот ImageFilter должен реализовать javax.swing.filechooser.FileFilter.
Проверьте, есть ли другой класс ImageFilter, определенный в учебнике, и используйте его.
Пример правильного файлового фильтра:
new JFileChooser().addChoosableFileFilter(new FileFilter() {
@Override
public boolean accept(File f) {
// TODO Auto-generated method stub
return f.getName().endsWith(".jpg");
}
@Override
public String getDescription() {
return "JPEG files";
}
});
Ответ 5
Вы можете использовать класс FileFilter
, а затем использовать setFileFilter()
class ImageFilter extends FileFilter {
@Override
public boolean accept(File pathname) {
String filename = pathname.getName();
if (pathname.isDirectory()) {
return true;
} else if (filename.endsWith("jpg'") || filename.endsWith("jpeg") || filename.endsWith("png") || filename.endsWith("gif")) {
return true;
} else {
return false;
}
}
Теперь в вашем основном классе:
fc.setFileFilter(new ImageFilter());
Ответ 6
Принятый ответ (с использованием FileNameExtensionFilter с ImageIO.getReaderFileSuffixes()) имеет некоторые проблемы.
В моей системе (jdk1.8.0_192 в Ubuntu) ImageIO.getReaderFileSuffixes() возвращает массив следующим образом:
[, jpg, tiff, bmp, pcx, gif, png, ppm, tif, pgm, wbmp, jpeg, pbm]
Обратите внимание на первую пустую строку. Эта строка недопустима в FileNameExtensionFilter:
IllegalArgumentException: Each extension must be non-null and not empty
На заметку - в той же системе с версией openjdk "11.0.2" 2019-01-15 я получаю следующие расширения:
[jpg, tif, tiff, bmp, gif, png, wbmp, jpeg]