关闭

实现文本预览文件对话框

标签: JAVA文件对话框
215人阅读 评论(0) 收藏 举报
分类:

文件对话框的基本使用:

    JFileChooser chooser = new JFileChooser();

    int iResult = chooser.showXXXDialog(....);

    if(JFileChooser.APPROVE_OPTION == iResult){

          Path  path = chooser.getSelectFile().toPth();

         //操作文件

    }

以上是文件对话框的基本使用


文件对话框的扩展:

     1.文件过滤器FileFilter

          主要对文件类型进行过滤,其中的 描述属性 被用来作为文件文件对话框的组合框的值,setFileFilter(),可以装有多个过滤器,下拉列表的值也会增加

     2.加速器Accessory

   主要是提供文件预览效果,setAccessory();

     3.文件视图FileView

          主要是文件的视图效果,常常使用属性Icon来进行图标的设置

想要实现一个复杂的文件对话框

class TextFilePreview extends JTextArea    //文件预览
{
	private JFileChooser chooser;

	public TextFilePreview(JFileChooser chooser)
	{
		super(20,20);
		
		setEditable(false);
		this.setLineWrap(true);      //文本区自动换行
		this.setWrapStyleWord(true); //自动换行时包裹单词,保证单词不被打断
		
		chooser.addPropertyChangeListener(new PropertyChangeListener(){

			@Override
			public void propertyChange(PropertyChangeEvent evt) {
				// TODO Auto-generated method stub
				if(evt.getPropertyName()==JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) //
				{
					File file =(File)evt.getNewValue();
					if(file==null)
					{
						setText("");
						return ;
					}
					 
					try (FileChannel channel = FileChannel.open(file.toPath()))
					{
						MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
						Charset charset = Charset.forName("UTF-8");
						CharBuffer cb = charset.decode(buffer);
						setText(cb.toString());	
						setCaretPosition(0);       //设置文本区中光标的位置,方便读入完成时从开头看起
					} catch (IOException e) {
						setText("");
					}
				}
			}
		});
	}
}

class TextFileFilter extends FileFilter // 文件过滤器
{

	private String suffix ;
	public TextFileFilter(String s){
		suffix = s; 
	}
	@Override
	public boolean accept(File pathname) {
		// TODO Auto-generated method stub
		String filename = pathname.toString();
		if(filename.endsWith(".txt") || filename.endsWith(".asm") || filename.endsWith(".java"))//打开*.asm , *.txt , *.java文件
		{
			return true;
		}
		if(pathname.isDirectory())  //为了目录也可以在对话框中显示
		{
			return true;
		}
		return false;
	}

	@Override
	public String getDescription()  
	{
		 return "*."+suffix;  //作为文件对话框的下拉列表的值
	}
}

class TextFileView extends FileView  //文件视图,主要用来实现文件图标效果
{
	private ImageIcon icon;
	private FileFilter filter;
	
	public TextFileView(FileFilter filter , ImageIcon  icon)
	{
		this.filter=filter;
		this.icon=icon;
	}
	
	@Override
	public Icon getIcon(File f)
	{
		if(!f.isDirectory() && filter.accept(f))
			return icon;
		return null;
	}
	
	
	
}

实现了上面之后,就是实现自定义的文件对话框了

public class FileDialog extends JFileChooser{
	
	public FileDialog(){
		
		setCurrentDirectory(new File("."));
		FileFilter filter = new TextFileFilter("txt");
		setFileFilter(filter);
		setFileView(new TextFileView(filter,new ImageIcon("file.png")));
		JScrollPane pane = new JScrollPane(new TextFilePreview(this));
		pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		setAccessory(pane);
		this.setPreferredSize(new Dimension(600,600));
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileDialog dialog = new FileDialog();
		dialog.showOpenDialog(null);
	}
	
	
}
在总结一下,过滤器,文件视图,加速器...

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2885次
    • 积分:147
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:2篇
    • 译文:2篇
    • 评论:2条
    文章存档
    最新评论