скорректируйте выбранный Файл к FileFilter в JFileChooser

Просто попробуйте использовать foreignObject в качестве контейнера, используя add. И сначала создайте элемент SPAN. Теперь это работает.

var fobj = draw.foreignObject(100,100)
var span = document.createElement('span')
span.innerText = 'Hello'
fobj.add(span)
11
задан Lahiru Ashan 25 November 2016 в 11:12
поделиться

4 ответа

Похоже, что можно слушать JFileChooser для разнообразия на FILE_FILTER_CHANGED_PROPERTY свойство, затем измените расширение выбранного файла соответственно с помощью setSelectedFile().


Править: Вы правы, это решение не работает. Оказывается, что, когда фильтр файла изменяется, выбранный файл удален, если его тип файла не соответствует новому фильтру. Вот почему Вы добираетесь null когда Вы пытаетесь getSelectedFile().

Вы рассмотрели добавление расширения позже? Когда я пишу a JFileChooser, Я обычно добавляю расширение после того, как пользователь выбрал файл для использования и нажал "Save":

if (result == JFileChooser.APPROVE_OPTION)
{
  File file = fileChooser.getSelectedFile();
  String path = file.getAbsolutePath();

  String extension = getExtensionForFilter(fileChooser.getFileFilter());

  if(!path.endsWith(extension))
  {
    file = new File(path + extension);
  }
}

fileChooser.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, new PropertyChangeListener()
{
  public void propertyChange(PropertyChangeEvent evt)
  {
    FileFilter filter = (FileFilter)evt.getNewValue();

    String extension = getExtensionForFilter(filter); //write this method or some equivalent

    File selectedFile = fileChooser.getSelectedFile();
    String path = selectedFile.getAbsolutePath();
    path.substring(0, path.lastIndexOf("."));

    fileChooser.setSelectedFile(new File(path + extension));
  }
});
11
ответ дан 3 December 2019 в 03:53
поделиться

Использование getAbsolutePath () в предыдущем изменении текущий каталог. Я был удивлен, когда диалоговое окно JFileChooser отображающееся изменение каталога "My documents" в каталоге проекта Netbeans, когда я выбрал другой FileFilter, таким образом, я изменил его для использования getName (). Я также использовал JDK 6 FileNameExtensionFilter.

Вот код:

    final JFileChooser fc = new JFileChooser();
    final File sFile = new File("test.xls");
    fc.setSelectedFile(sFile);
    // Store this filter in a variable to be able to select this after adding all FileFilter
    // because addChoosableFileFilter add FileFilter in order in the combo box
    final FileNameExtensionFilter excelFilter = new FileNameExtensionFilter("Excel document (*.xls)", "xls");
    fc.addChoosableFileFilter(excelFilter);
    fc.addChoosableFileFilter(new FileNameExtensionFilter("CSV document (*.csv)", "csv"));
    // Force the excel filter
    fc.setFileFilter(excelFilter);
    // Disable All Files
    fc.setAcceptAllFileFilterUsed(false);

    // debug
    fc.addPropertyChangeListener(new PropertyChangeListener() {

        public void propertyChange(PropertyChangeEvent evt) {
            System.out.println("Property name=" + evt.getPropertyName() + ", oldValue=" + evt.getOldValue() + ", newValue=" + evt.getNewValue());
            System.out.println("getSelectedFile()=" + fc.getSelectedFile());
        }
    });

    fc.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, new PropertyChangeListener() {

        public void propertyChange(PropertyChangeEvent evt) {
            Object o = evt.getNewValue();
            if (o instanceof FileNameExtensionFilter) {
                FileNameExtensionFilter filter = (FileNameExtensionFilter) o;

                String ex = filter.getExtensions()[0];

                File selectedFile = fc.getSelectedFile();
                if (selectedFile == null) {
                    selectedFile = sFile;
                }
                String path = selectedFile.getName();
                path = path.substring(0, path.lastIndexOf("."));

                fc.setSelectedFile(new File(path + "." + ex));
            }
        }
    });
0
ответ дан 3 December 2019 в 03:53
поделиться

Вот моя попытка. Он использует функцию accept (), чтобы проверить, проходит ли файл фильтр. Если имя файла не указано, расширение добавляется в конец.

JFileChooser jfc = new JFileChooser(getFile()) {
        public void approveSelection() {
            if (getDialogType() == SAVE_DIALOG) {
                File selectedFile = getSelectedFile();

                FileFilter ff = getFileFilter();

                // Checks against the current selected filter
                if (!ff.accept(selectedFile)) {
                    selectedFile = new File(selectedFile.getPath() + ".txt");
                }
                super.setSelectedFile(selectedFile);

                if ((selectedFile != null) && selectedFile.exists()) {
                    int response = JOptionPane.showConfirmDialog(
                            this,
                            "The file " + selectedFile.getName() + " already exists.\n" +
                            "Do you want to replace it?",
                            "Ovewrite file",
                            JOptionPane.YES_NO_OPTION,
                            JOptionPane.WARNING_MESSAGE
                    );
                    if (response == JOptionPane.NO_OPTION)
                        return;
                }
            }
            super.approveSelection();
        }
    };
0
ответ дан 3 December 2019 в 03:53
поделиться

Вы также можете использовать PropertyChangeListener для SELECTED_FILE_CHANGED_PROPERTY перед добавлением суффикса. Когда выбранный файл проверяется на соответствие новому фильтру (и впоследствии устанавливается значение null), событие SELECTED_FILE_CHANGED_PROPERTY фактически запускается перед событием FILE_FILTER_CHANGED_PROPERTY.

Если evt.getOldValue ()! = Null и evt.getNewValue () == null, вы знаете, что JFileChooser взорвал ваш файл. Затем вы можете получить имя старого файла (используя ((File) evt.getOldValue ()). GetName (), как описано выше), извлечь расширение, используя стандартные функции синтаксического анализа строк, и спрятать его в именованную переменную-член в вашем классе .

Таким образом, когда запускается событие FILE_FILTER_CHANGED (сразу после этого, насколько я могу определить), вы можете извлечь это скрытое корневое имя из именованной переменной-члена, применить расширение для нового типа фильтра файлов и установить Выбранный файл JFileChooser соответственно.

4
ответ дан 3 December 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: