文件选择对话框包括文件的打开与保存和自定义几种类别。其中文件保存对话框常用于各类编辑器模块中,如系统自带的记事本程序的文件保存对话框、画图程序的文件保存对话框以及Photoshop程序的文件保存对话框等。本实例将通过Java代码实现文件保存对话框的显示,读者可以把它应用到自己的项目中。实例运行效果如图
在其中输入编辑文本,然后选择“文件”/“保存”命令,弹出“保存”对话框,如图
本实例同样使用JFileChooser类的方法来打开文件对话框,但本实例打开的是文件保存对话框而不是文件打开对话框,请注意对话框中的标题与按钮的名称。实例中用到的显示文件保存对话框的方法声明如下:
public int showSaveDialog(Component parent) throws HeadlessException
参数说明
parent:父窗体对象。
返回值:用户在文件打开对话框中进行的操作对应的int型常量。
(1)在项目中创建窗体类FileSaveDialog。在窗体中添加文本域与菜单栏,然后在菜单栏中添加“保存”与“退出”菜单项。
(2)编写“保存”菜单项的事件处理方法,在该方法中创建文件选择器,然后调用其方法显示文件打开对话框,并获取用户选择的文件,然后把文本域中的文本保存到用户选择的文件中。代码如下:
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; public class FileSaveDialog extends JFrame { private JPanel contentPane; private JTextArea textArea; /** * Launch the application. */ public static void main(String[] args) { try { UIManager .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (Throwable e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { public void run() { try { FileSaveDialog frame = new FileSaveDialog(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public FileSaveDialog() { setTitle("\u6587\u4EF6\u9009\u62E9\u5BF9\u8BDD\u6846\u6307\u5B9A\u6570\u636E\u5907\u4EFD"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 291); JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); JMenu menu = new JMenu("\u6587\u4EF6"); menuBar.add(menu); JMenuItem menuItem = new JMenuItem("\u4FDD\u5B58"); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { do_menuItem_actionPerformed(e); } }); menu.add(menuItem); JMenuItem menuItem_1 = new JMenuItem("\u9000\u51FA"); menuItem_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { do_menuItem_1_actionPerformed(e); } }); menu.add(menuItem_1); contentPane = new JPanel(); setContentPane(contentPane); contentPane.setLayout(new BorderLayout(0, 0)); JScrollPane scrollPane = new JScrollPane(); contentPane.add(scrollPane, BorderLayout.CENTER); textArea = new JTextArea(); textArea.setFont(new Font("宋体", Font.PLAIN, 14)); textArea.setLineWrap(true); textArea.setTabSize(4); scrollPane.setViewportView(textArea); } protected void do_menuItem_actionPerformed(ActionEvent e) { String text = textArea.getText();// 获取用户输入 if (text.isEmpty()) {// 过滤空文本的保存操作 JOptionPane.showMessageDialog(this, "没有需要保存的文本"); return; } JFileChooser chooser = new JFileChooser();// 创建文件选择器 int option = chooser.showSaveDialog(this);// 打开文件保存对话框 if (option == JFileChooser.APPROVE_OPTION) {// 处理文件保存操作 File file = chooser.getSelectedFile();// 获取用户选择的文件 try { FileOutputStream fout = new FileOutputStream(file);// 创建该文件的输出流 fout.write(text.getBytes());// 把文本保存到文件 } catch (IOException e1) { e1.printStackTrace(); } } } protected void do_menuItem_1_actionPerformed(ActionEvent e) { System.exit(0); } }
心法领悟:指定文件选择对话框的父窗体。
只要是对话框,都应该尽量指定一个父窗体,文件选择对话框也是一样,当对话框打开时,将屏蔽或拦截父窗体所有的事件操作,在用户完成对话框中的业务操作之前,不允许操作主窗体。如果在显示文件选择对话框时,将父窗体指定为NULL值,那么对话框会选择默认主窗体。
我要评论