JFileChooser 在jdk帮助中的例子如下: JFileChooser chooser = new JFileChooser(); // Note: source for ExampleFileFilter can be found in FileChooserDemo, // under the demo/jfc directory in the Java 2 SDK, Standard Edition. ExampleFileFilter filter = new ExampleFileFilter(); filter.addExtension("jpg"); filter.addExtension("gif"); filter.setDescription("JPG & GIF Images"); 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()); }
给楼主一个程序和你的要求一样。 import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.beans.*; import java.util.*; import java.io.*; import javax.swing.*; import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileView;public class FileChooserTest { public static void main(String[] args) { ImageViewerFrame frame = new ImageViewerFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }/** A frame that has a menu for loading an image and a display area for the loaded image. */ class ImageViewerFrame extends JFrame { public ImageViewerFrame() { setTitle("FileChooserTest"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // set up menu bar JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu menu = new JMenu("File"); menuBar.add(menu); JMenuItem openItem = new JMenuItem("Open"); menu.add(openItem); openItem.addActionListener(new FileOpenListener()); JMenuItem exitItem = new JMenuItem("Exit"); menu.add(exitItem); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); // use a label to display the images label = new JLabel(); label.setHorizontalAlignment(SwingConstants.CENTER); label.setVerticalAlignment(SwingConstants.CENTER); add(label); // set up file chooser chooser = new JFileChooser(); // accept all image files ending with .jpg, .jpeg, .gif final ExtensionFileFilter filter = new ExtensionFileFilter(); filter.addExtension("jpg"); filter.setDescription("JPG格式图片"); filter.addExtension("jpeg"); filter.addExtension("gif"); filter.setDescription("Image files"); filter.setDescription("JPG格式图片"); chooser.setFileFilter(filter); chooser.setAccessory(new ImagePreviewer(chooser));
chooser.setFileView(new FileIconView(filter, new ImageIcon("palette.gif"))); }
/** This is the listener for the File->Open menu item. */ private class FileOpenListener implements ActionListener { public void actionPerformed(ActionEvent event) { chooser.setCurrentDirectory(new File(".")); // show file chooser dialog int result = chooser.showOpenDialog(ImageViewerFrame.this); // if image file accepted, set it as icon of the label if(result == JFileChooser.APPROVE_OPTION) { String name = chooser.getSelectedFile().getPath(); label.setIcon(new ImageIcon(name)); } } } public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 400; private JLabel label; private JFileChooser chooser; }/** This file filter matches all files with a given set of extensions. */ class ExtensionFileFilter extends FileFilter { /** Adds an extension that this file filter recognizes. @param extension a file extension (such as ".txt" or "txt") */ public void addExtension(String extension) { if (!extension.startsWith(".")) extension = "." + extension; extensions.add(extension.toLowerCase()); } /** Sets a description for the file set that this file filter recognizes. @param aDescription a description for the file set */ public void setDescription(String aDescription) { description = aDescription; } /** Returns a description for the file set that this file filter recognizes. @return a description for the file set */ public String getDescription() { return description; } public boolean accept(File f) { if (f.isDirectory()) return true; String name = f.getName().toLowerCase(); // check if the file name ends with any of the extensions for (String extension : extensions) if (name.endsWith(extension)) return true; return false; }
private String description = ""; private ArrayList<String> extensions = new ArrayList<String>(); }/** A file view that displays an icon for all files that match a file filter. */ class FileIconView extends FileView { /** Constructs a FileIconView. @param aFilter a file filter--all files that this filter accepts will be shown with the icon. @param anIcon--the icon shown with all accepted files. */ public FileIconView(FileFilter aFilter, Icon anIcon) { filter = aFilter; icon = anIcon; } public Icon getIcon(File f) { if (!f.isDirectory() && filter.accept(f)) return icon; else return null; }
private FileFilter filter; private Icon icon; }/** A file chooser accessory that previews images. */ class ImagePreviewer extends JLabel { /** Constructs an ImagePreviewer. @param chooser the file chooser whose property changes trigger an image change in this previewer */ public ImagePreviewer(JFileChooser chooser) { setPreferredSize(new Dimension(100, 100)); setBorder(BorderFactory.createEtchedBorder()); chooser.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) { // the user has selected a new file File f = (File) event.getNewValue(); if (f == null) { setIcon(null); return; }
// read the image into an icon ImageIcon icon = new ImageIcon(f.getPath()); // if the icon is too large to fit, scale it if(icon.getIconWidth() > getWidth()) icon = new ImageIcon(icon.getImage().getScaledInstance( getWidth(), -1, Image.SCALE_DEFAULT)); setIcon(icon); } } }); } }
package com.xxx;import java.io.File; import javax.swing.filechooser.*;/* ImageFilter.java is used by FileChooserDemo2.java. */ public class TextFilter extends FileFilter { /* * Get the extension of a file. */ public static String getExtension(File f) { String ext = null; String s = f.getName(); int i = s.lastIndexOf('.'); if (i > 0 && i < s.length() - 1) { ext = s.substring(i+1).toLowerCase(); } return ext; }
//Accept all directories and all gif, jpg, tiff, or png files. public boolean accept(File f) { if (f.isDirectory()) { return true; } String extension = getExtension(f); if (extension != null) { if (extension.equals("txt") || extension.equals("dat")) { return true; } else { return false; } } return false; } //The description of this filter public String getDescription() { return "Just Text Files"; } }
在jdk帮助中的例子如下:
JFileChooser chooser = new JFileChooser();
// Note: source for ExampleFileFilter can be found in FileChooserDemo,
// under the demo/jfc directory in the Java 2 SDK, Standard Edition.
ExampleFileFilter filter = new ExampleFileFilter();
filter.addExtension("jpg");
filter.addExtension("gif");
filter.setDescription("JPG & GIF Images");
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());
}
filter.addExtension("jpg");
filter.addExtension("gif");
filter.setDescription("JPG & GIF Images");
改成你说的
filter.addExtension("txt");
这样就能达到你的目的了
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.beans.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;public class FileChooserTest
{
public static void main(String[] args)
{
ImageViewerFrame frame = new ImageViewerFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}/**
A frame that has a menu for loading an image and a display
area for the loaded image.
*/
class ImageViewerFrame extends JFrame
{
public ImageViewerFrame()
{
setTitle("FileChooserTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // set up menu bar
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar); JMenu menu = new JMenu("File");
menuBar.add(menu); JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new FileOpenListener()); JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
}); // use a label to display the images
label = new JLabel();
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setVerticalAlignment(SwingConstants.CENTER);
add(label); // set up file chooser
chooser = new JFileChooser(); // accept all image files ending with .jpg, .jpeg, .gif
final ExtensionFileFilter filter = new ExtensionFileFilter();
filter.addExtension("jpg");
filter.setDescription("JPG格式图片");
filter.addExtension("jpeg");
filter.addExtension("gif");
filter.setDescription("Image files");
filter.setDescription("JPG格式图片");
chooser.setFileFilter(filter); chooser.setAccessory(new ImagePreviewer(chooser));
chooser.setFileView(new FileIconView(filter, new ImageIcon("palette.gif")));
}
/**
This is the listener for the File->Open menu item.
*/
private class FileOpenListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
chooser.setCurrentDirectory(new File(".")); // show file chooser dialog
int result = chooser.showOpenDialog(ImageViewerFrame.this); // if image file accepted, set it as icon of the label
if(result == JFileChooser.APPROVE_OPTION)
{
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
}
} public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 400; private JLabel label;
private JFileChooser chooser;
}/**
This file filter matches all files with a given set of
extensions.
*/
class ExtensionFileFilter extends FileFilter
{
/**
Adds an extension that this file filter recognizes.
@param extension a file extension (such as ".txt" or "txt")
*/
public void addExtension(String extension)
{
if (!extension.startsWith("."))
extension = "." + extension;
extensions.add(extension.toLowerCase());
} /**
Sets a description for the file set that this file filter
recognizes.
@param aDescription a description for the file set
*/
public void setDescription(String aDescription)
{
description = aDescription;
} /**
Returns a description for the file set that this file
filter recognizes.
@return a description for the file set
*/
public String getDescription()
{
return description;
} public boolean accept(File f)
{
if (f.isDirectory()) return true;
String name = f.getName().toLowerCase(); // check if the file name ends with any of the extensions
for (String extension : extensions)
if (name.endsWith(extension))
return true;
return false;
}
private String description = "";
private ArrayList<String> extensions = new ArrayList<String>();
}/**
A file view that displays an icon for all files that match
a file filter.
*/
class FileIconView extends FileView
{
/**
Constructs a FileIconView.
@param aFilter a file filter--all files that this filter
accepts will be shown with the icon.
@param anIcon--the icon shown with all accepted files.
*/
public FileIconView(FileFilter aFilter, Icon anIcon)
{
filter = aFilter;
icon = anIcon;
} public Icon getIcon(File f)
{
if (!f.isDirectory() && filter.accept(f))
return icon;
else return null;
}
private FileFilter filter;
private Icon icon;
}/**
A file chooser accessory that previews images.
*/
class ImagePreviewer extends JLabel
{
/**
Constructs an ImagePreviewer.
@param chooser the file chooser whose property changes
trigger an image change in this previewer
*/
public ImagePreviewer(JFileChooser chooser)
{
setPreferredSize(new Dimension(100, 100));
setBorder(BorderFactory.createEtchedBorder()); chooser.addPropertyChangeListener(new
PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent
event)
{
if (event.getPropertyName() ==
JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
{
// the user has selected a new file
File f = (File) event.getNewValue();
if (f == null) { setIcon(null); return; }
// read the image into an icon
ImageIcon icon = new ImageIcon(f.getPath()); // if the icon is too large to fit, scale it
if(icon.getIconWidth() > getWidth())
icon = new ImageIcon(icon.getImage().getScaledInstance(
getWidth(), -1, Image.SCALE_DEFAULT)); setIcon(icon);
}
}
});
}
}
我的意思是在对话框中选择文件。
比如“父文件夹-〉子文件夹1、2...”当选择到子文件夹1时,因为它目录下不再有文件夹,只有.txt文件,因此不能继续打开它的下级目录,而是提示它目录下文件名、文件个数等其他信息。
请问用Java怎么实现?
import javax.swing.filechooser.*;/* ImageFilter.java is used by FileChooserDemo2.java. */
public class TextFilter extends FileFilter {
/*
* Get the extension of a file.
*/
public static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.'); if (i > 0 && i < s.length() - 1) {
ext = s.substring(i+1).toLowerCase();
}
return ext;
}
//Accept all directories and all gif, jpg, tiff, or png files.
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
} String extension = getExtension(f);
if (extension != null) {
if (extension.equals("txt") ||
extension.equals("dat")) {
return true;
} else {
return false;
}
} return false;
} //The description of this filter
public String getDescription() {
return "Just Text Files";
}
}
fc.setFileFilter(new TextFilter());
int retVal = fc.showSaveDialog(this);
if (retVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
if (file.exists() == false
|| file.exists() == true
&& JOptionPane.showConfirmDialog(this, "是否替换现有文件?",
"友情提示", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { // 保存文件
try {
String filepath = TextFilter.getExtension(file) == null ? (file
.getPath() + ".txt")
: file.getPath();
//todo...
JOptionPane.showMessageDialog(this, "文件保存到" + filepath
+ ",请查看!", "提示",
JOptionPane.INFORMATION_MESSAGE);
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(),
"错误提示", JOptionPane.ERROR_MESSAGE);
}
}
}