'javax.swing.JFileChooser' 中的 'setFileFilter(javax.swing.filechooser.FileFilter)' 无法应用于 '(anonymous java.io.FileFilter)'
时间: 2023-08-23 20:06:50 浏览: 42
这是因为 'setFileFilter' 方法需要一个 'javax.swing.filechooser.FileFilter' 类型的参数,但是您传递了一个匿名的 'java.io.FileFilter' 类型的参数。这两个类虽然名称相似,但它们是不同的类。
您可以通过创建一个 'javax.swing.filechooser.FileFilter' 的实例来解决这个问题。例如:
```
FileFilter filter = new FileFilter() {
public boolean accept(File file) {
// your implementation of accept method
}
public String getDescription() {
// your implementation of getDescription method
}
};
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(filter);
```
这样就可以将 'filter' 对象作为参数传递给 'setFileFilter' 方法了。
相关问题
如何创建一个'javax.swing.filechooser.FileFilter'实例
可以按照以下步骤创建一个`javax.swing.filechooser.FileFilter`的实例:
1. 创建一个类并实现`javax.swing.filechooser.FileFilter`接口。
```java
public class MyFileFilter extends javax.swing.filechooser.FileFilter {
public boolean accept(File file) {
// 文件过滤规则
}
public String getDescription() {
// 文件类型描述
}
}
```
2. 在`accept`方法中定义文件过滤规则,只有符合规则的文件才会显示在文件选择器中。
```java
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
String extension = getExtension(file);
if (extension != null) {
if (extension.equals("txt") || extension.equals("java")) {
return true;
} else {
return false;
}
}
return false;
}
private String getExtension(File file) {
String extension = null;
String name = file.getName();
int dotIndex = name.lastIndexOf(".");
if (dotIndex > 0 && dotIndex < name.length() - 1) {
extension = name.substring(dotIndex + 1).toLowerCase();
}
return extension;
}
```
3. 在`getDescription`方法中定义文件类型描述。
```java
public String getDescription() {
return "Text and Java files (*.txt, *.java)";
}
```
4. 创建`JFileChooser`实例,并为其设置文件过滤器。
```java
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new MyFileFilter());
```
这样就可以创建一个`javax.swing.filechooser.FileFilter`的实例并使用它来过滤文件。
不兼容的类型: <匿名java.io.FilenameFilter>无法转换为javax.swing.filechooser.FileFilter
这个错误提示是由于你试图将一个匿名的`java.io.FilenameFilter`类型转换为`javax.swing.filechooser.FileFilter`类型,这两种类型是不兼容的。`java.io.FilenameFilter`是用于过滤文件名的接口,而`javax.swing.filechooser.FileFilter`是用于过滤文件的接口。如果你想要在文件选择器中使用过滤器,应该使用`javax.swing.filechooser.FileFilter`接口,并实现它的`accept(File f)`和`getDescription()`方法。你可以创建一个新的类来实现该接口,或者使用一个已有的类来实现该接口。