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;
}
}