Swing组件4(JFileChooser)

JFileChooser组件可以弹出对话框,让用户选择浏览路径并选择文件或创建一个文件。

构造函数

(1)默认构造函数:JFileChooser();  

(2)参数为currentDirectory:JFileChooser(currentDirectory),参数表示的意思是打开文件选取器时默认显示的文件夹(默认为用户文件夹)  

(3)参数为currentDirectoryPath:JFileChooser(currentDirectoryPath),参数表示的意思是打开文件选取器时默认显示的文件夹(默认为用户文件夹)

方法:

setCurrentDirectory() 定位到当前的目录

setFileSelectionMode() 设置选择模式,包含:

FILES_ONLY 只选文件;
DIRECTORIES_ONLY  只选文件夹;
FILES_AND_DIRECTORIES 可选文件或文件夹

setMultiSelectionEnabled() 设置是否允许多选

addChoosableFileFilter()
setFileFilter()设置选择对话框滤除哪些类型文件
//设计卡片
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Panel;
import java.awt.event.*;
import java.util.*;

public class QuizCardBuilder {
	private JTextArea question;
	private JTextArea answer;
	private ArrayList<QuizCard> cardList;
	private JFrame frame ;
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		QuizCardBuilder builder = new QuizCardBuilder();
		builder.go();
	}
	
	/**
	 * 
	 */
	public void go()
	{
		//创建问题和答案文本框
		frame = new JFrame("卡片生成器");
		JPanel mainPanel = new JPanel();
		Font bigFont = new Font("sanserif",Font.BOLD,24);
		question = new JTextArea(6, 20);
		question.setLineWrap(true);
		question.setWrapStyleWord(true);//
		question.setFont(bigFont);
		
		JScrollPane qScroller = new JScrollPane(question);
		qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		
		answer = new JTextArea(6, 20);
		answer.setLineWrap(true);
		answer.setWrapStyleWord(true);//
		answer.setFont(bigFont);
		
		JScrollPane aScroller = new JScrollPane(answer);
		aScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		aScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		
		//创建按键
		JButton nextButton = new JButton("next card");
		
		cardList = new ArrayList<QuizCard>();
		
		//创建问题和答案提示文本
		JLabel qLable = new JLabel("问题");
		JLabel aLable = new JLabel("答案");
		
		//将上述东西加到面板上去
		mainPanel.add(qLable);
		mainPanel.add(qScroller);
		mainPanel.add(aLable);
		mainPanel.add(aScroller);
		mainPanel.add(nextButton);
		
		//给按键添加监听响应
		nextButton.addActionListener(new NextCardListener());//容易忘记写new
		
		//创建菜单栏及选项
		JMenuBar menuBar = new JMenuBar();
		JMenu fileMenu = new JMenu("文件");
		JMenuItem newMenuItem = new JMenuItem("新建");
		JMenuItem saveMenuItem = new JMenuItem("保存");
		
		JMenu windowMenu = new JMenu("窗口");
		
		//给新建、保存选项天剑监听响应
		newMenuItem.addActionListener(new NewMenuLister());
		saveMenuItem.addActionListener(new SaveMenuListener());
		
		//将创建的菜单栏及选项串联起来
		fileMenu.add(newMenuItem);
		fileMenu.add(saveMenuItem);
		menuBar.add(fileMenu);
		menuBar.add(windowMenu);
		
		frame.setJMenuBar(menuBar);
		
		frame.getContentPane().add(BorderLayout.CENTER,mainPanel);
		frame.setSize(500,600);
		frame.setVisible(true);
	}
	
	/**
	 * 
	 * @author Administrator
	 *
	 */
	public class NextCardListener implements ActionListener{
		public void actionPerformed(ActionEvent ev)
		{
			QuizCard card = new QuizCard(question.getText(),answer.getText());
			cardList.add(card);
			clearCard();
		}
	}
	
	/**
	 * 
	 * @author Administrator
	 *
	 */
	public class SaveMenuListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO 自动生成的方法存根
			QuizCard card = new QuizCard(question.getText(),answer.getText());
			cardList.add(card);
			
			//弹出对话框,可以选择文件,System.getProperty("user.dir")用于设置默认路径为工程所在文件夹
			JFileChooser fileSave = new JFileChooser();//(System.getProperty("user.dir"));

			//设置默认打开的路径
			//先判断是否存在用于存放数据的文件夹,如果不存在就创建该文件夹
			//创建文件使用“file.createNewFile()”
			File testDir = new File("./DataTmp");
			if(!testDir.exists())
			{
				testDir.mkdir();//创建文件夹
			}
			
			fileSave.setCurrentDirectory(testDir);//切换到对应文件夹目录下
			
			/*
			 可是设置对话打开的方式,有如下打开方式:
			FILES_ONLY 只选文件;
			DIRECTORIES_ONLY  只选文件夹;
			FILES_AND_DIRECTORIES 可选文件或文件夹
			 **/
			fileSave.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
			
			//设置是否允许多选
			fileSave.setMultiSelectionEnabled(false);
			
			//向用户可选择的文件过滤器列表添加一个过滤器
			fileSave.addChoosableFileFilter(new FileNameExtensionFilter("zip(*.zip,*.rar)", ".zip",".rar"));
			
			//过滤可以选择窗口中哪些后缀的文件,将这些后缀名称文件过滤不显示
			fileSave.setFileFilter(new FileNameExtensionFilter("image(*.jpg,*.png,*gif)", ".jpg",".png",".gif"));
			
			fileSave.showSaveDialog(frame);
			saveFile(fileSave.getSelectedFile());
		}
		
	}
	
	public class NewMenuLister implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO 自动生成的方法存根
			cardList.clear();//将缓存进行清空,一遍重新输入
			clearCard();   //清空屏幕
		}
		
	}
	
	/**
	 * 
	 */
	public void clearCard()
	{
		question.setText("");
		answer.setText("");
		question.requestFocus();//
	}

	/**
	 * 
	 * @param file
	 */
	public void saveFile(File file)
	{
		try{
			System.out.println(file);
			BufferedWriter Write = new BufferedWriter(new FileWriter(file));
			for(QuizCard card:cardList)
			{
				Write.write(card.getQuestion()+"/");
				Write.write(card.getAnswer() + "\n");
				
			}
			Write.close();
		}catch(IOException ex){
			System.out.println("存储失败");
			ex.printStackTrace();
		}
	}
}

//卡片信息
public class QuizCard {
	private String question;
	private String answer;
	
	/**
	 * 
	 * @param q
	 * @param a
	 */
	public QuizCard(String q, String a)
	{
		question = q;
		answer = a;
	}
	
	/**
	 * 
	 * @return
	 */
	public String getQuestion()
	{
		return question;
	}
	
	/**
	 * 
	 * @return
	 */
	public String getAnswer()
	{
		return answer;
	}
}
发布了70 篇原创文章 · 获赞 4 · 访问量 4003

猜你喜欢

转载自blog.csdn.net/l0510402015/article/details/100062888