/* * Copyright 2001-2014 Aspose Pty Ltd. All Rights Reserved. * * This file is part of Aspose.Words. The source code in this file * is only intended as a supplement to the documentation, and is provided * "as is", without warranty of any kind, either expressed or implied. */ package com.aspose.words.examples.viewers_visualizers.document_explorer; import javax.swing.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; /** * Corrects JFileChooser Save Dialog behavior to act more like how Microsoft * Word does. - Preserves the current file name in the edit box when a different * filter or directory is chosen. - Automatically changes the file extension on * the file name when a different filter is chosen. */ class SaveDialogChangeListener implements PropertyChangeListener { public SaveDialogChangeListener(JFileChooser chooser) { mChooser = chooser; } public void propertyChange(PropertyChangeEvent e) { String propertyName = e.getPropertyName(); if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(propertyName)) { fileChanged(e); } else if (JFileChooser.FILE_FILTER_CHANGED_PROPERTY.equals(propertyName)) { filterChanged(e); } else if (JFileChooser.DIRECTORY_CHANGED_PROPERTY.equals(propertyName)) { directoryChanged(e); } } /** * Remembers the old and new file names used in the dialog. */ private void fileChanged(PropertyChangeEvent e) { mNewFile = (File) e.getNewValue(); mOldFile = (File) e.getOldValue(); } /** * Changes a file extension when the user changes file filter. */ private void filterChanged(PropertyChangeEvent e) { // When the user changes the filter used, JFileChooser deletes the "old" filename - we must correct this. if (mNewFile == null && mOldFile != null) { mNewFile = mOldFile; } // Change the file extension according to the new chosen filter. SaveFileFilter newFilter = (SaveFileFilter) e.getNewValue(); mNewFile = Utils.setExtension(mNewFile, newFilter.mExtension); // Show this to the user. mChooser.setSelectedFile(mNewFile); mChooser.updateUI(); } /** * Restores a file name deleted by JFileChooser when an user changes current * directory. */ private void directoryChanged(PropertyChangeEvent e) { if (mNewFile == null && mOldFile != null) { mNewFile = new File(mOldFile.getName()); mChooser.setSelectedFile(mNewFile); mChooser.updateUI(); } } private static JFileChooser mChooser; private static File mNewFile; private static File mOldFile; }