我有一个需要打开特定扩展名的文件的JButton。简而言之,如果单击JButton,我会定义一个JButton向其添加一个触发JFileChooser的actionlistener。我想添加一个文件过滤器,以便只在JFileChooser上显示扩展名.mpg的文件。
编译显示没有错误,但是在摇摆中,JFileChooser没有显示可用文件的过滤(组合框中没有“电影文件”选项 - 只是'所有文件')。用两个词来说,似乎addChoosableFileFilter
没有任何效果。
我的代码是:
final JFileChooser jfc = new JFileChooser(moviedir);
//add File Filter
jfc.addChoosableFileFilter(new FileFilter() {
@Override
public String getDescription() {
return "Movie files (*.mpg)";
}
@Override
public boolean accept(File f) {
if (f.isDirectory()) {return true;}
else {return f.getName().toLowerCase().endsWith(".mpg");}
}
});
我也尝试了
的替代方案jfc.addChoosableFileFilter(new FileNameExtensionFilter("Movie files", "mpg"));
同样的命运。以上所有内容都在我挥杆的JFrame的JPanel上。
我读过很多相关主题,但没有运气。
提前感谢您的评论。
答案 0 :(得分:3)
JFileChooser为用户提供了一种简单的机制来选择 文件。有关使用JFileChooser的信息,请参阅如何使用文件 选择器,The Java Tutorial中的一个部分。
以下代码会弹出用户主目录的文件选择器 仅查看.jpg和.gif图像的目录:
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
试试这个。 Copied from here
答案 1 :(得分:1)
试试这段代码。它对我有用
像这样调用你的文件回应者: -
JFileChooser fc = new JFileChooser("C:/");
fc.setFileFilter(new JPEGImageFileFilter());
并使类JPEGImageFileFilter像这样: -
class JPEGImageFileFilter extends FileFilter implements java.io.FileFilter
{
public boolean accept(File f)
{
if (f.getName().toLowerCase().endsWith(".jpeg")) return true;
if (f.getName().toLowerCase().endsWith(".jpg")) return true;
if (f.getName().toLowerCase().endsWith(".avi")) return true;
if (f.getName().toLowerCase().endsWith(".mpeg")) return true;
return false;
}
public String getDescription()
{
return "JPEG files";
}
}
答案 2 :(得分:0)
举一个例子供参考。
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.*;
public class TextReaderExapmle extends JFrame {
private static final long serialVersionUID = -8816650884305666302L;
private static final String FRAME_TITLE = "File Chosser demo";
private static final Dimension FRAME_SIZE = new Dimension(400, 350);
private JButton fileChoosingButton;
private JTextArea textArea;
private JFileChooser fileChooser;
public TextReaderExapmle() {
super(FRAME_TITLE);
init();
doLay();
attachListeners();
}
private void init() {
fileChoosingButton = new JButton(new FileChooseAction());
textArea = new JTextArea();
fileChooser = new JFileChooser(System.getProperty("user.dir"));
fileChooser.setFileFilter(new TextFileFilter());
fileChooser.setMultiSelectionEnabled(false);
}
private void doLay() {
Container container = getContentPane();
container.add(fileChoosingButton, BorderLayout.NORTH);
container.add(new JScrollPane(textArea), BorderLayout.CENTER);
setSize(FRAME_SIZE);
setVisible(true);
}
private void attachListeners() {
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(1);
}
});
}
/**
* read text from the selected text file and convert text to string
*
* @param reader
* @return converted string
*/
private static String readTextFromFile(final FileReader reader) {
if (reader == null)
return "";
StringBuffer buf = new StringBuffer();
final int CACHE_SIZE = 1024;
final char[] cache = new char[CACHE_SIZE];
try {
int b;
while ((b = reader.read(cache)) != -1) {
if (b < CACHE_SIZE)
buf.append(cache, 0, b);
else
buf.append(cache);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return buf.toString();
}
/**
* open file chooser action
*/
private class FileChooseAction extends AbstractAction {
static private final String ACTION_LABEL = "Open File...";
public FileChooseAction() {
super(ACTION_LABEL);
}
public void actionPerformed(ActionEvent e) {
int returnVal = fileChooser.showOpenDialog(fileChoosingButton);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
FileReader reader = new FileReader(
fileChooser.getSelectedFile());
textArea.setText(readTextFromFile(reader));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}
}
/* file filter */
private class TextFileFilter extends FileFilter {
private final java.util.List<String> fileNameExtensionList = new ArrayList<String>();
public TextFileFilter() {
fileNameExtensionList.add("txt");
fileNameExtensionList.add("java");
fileNameExtensionList.add("log");
fileNameExtensionList.add("xml");
fileNameExtensionList.add("htm");
fileNameExtensionList.add("html");
fileNameExtensionList.add("html");
fileNameExtensionList.add("properties");
fileNameExtensionList.add("svg");
}
public boolean accept(File f) {
if (f.isDirectory())
return true;
final String fileName = f.getName();
int lastIndexOfDot = fileName.lastIndexOf('.');
if (lastIndexOfDot == -1)
return false;
int fileNameLength = fileName.length();
final String extension = fileName.substring(lastIndexOfDot + 1,
fileNameLength);
return fileNameExtensionList.contains(extension);
}
public String getDescription() {
StringBuffer buf = new StringBuffer("Text File(");
for (String fn : fileNameExtensionList)
buf.append(MessageFormat.format("*.{0};", fn));
return buf.append(')').toString();
}
}
public static void main(String[] args) {
new TextReaderExapmle();
}
}
答案 3 :(得分:0)
简单......
jfc.setFileFilter(new FileNameExtensionFilter("Movie files", "mpg"));
答案 4 :(得分:0)
使用以下代码,使其更易读:
final JFileChooser jfc = new JFileChooser(moviedir);
jfc.addChoosableFileFilter(new FileNameExtensionFilter(&#34; * .mpg&#34;,&#34; mpg&#34;));