showOpenDialog () снова, если открытый файл не является XML - PullRequest
0 голосов
/ 01 февраля 2012

Я сделал простое приложение для открытия только XML-файлов, используя JFileChooser. Как мне снова и снова показывать диалог открытия, пока я не открою правильный файл XML или не нажму кнопку отмены?

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

Вы можете добавить фильтр файлов к средству выбора файлов, который проверяет, является ли файл файлом XML.

Когда пользователь выбрал файл, вы проверяете содержимое этого файла и, если он недействителен, вы простоСнова откройте средство выбора файлов, например, в цикле, который завершается, когда файл является допустимым или пользователь выбрал опцию отмены.

В основном цикл может выглядеть следующим образом (он быстро записывается и может содержать ошибки):

int option = CANCEL_OPTION;
boolean fileIsValid = false;
do {
 option = filechooser.showOpenDialog(); //or save?
 if( option == OK_OPTION ) {
    fileIsValid = isValid( filechooser.getSelectedFile()); //implementation of isValid() is left for you
 }
} while( option == OK_OPTION && !fileIsValid);

Этот цикл выполняет следующие действия:

  • открывает окно выбора файлов и получает выбранную опцию
  • , когда выбрана опция OK, выбранный файл отмечен
  • когда выбрана опция ОК, но выбранный файл недействителен, выполните другую итерацию - в противном случае завершите цикл (если была выбрана другая опция, например, ОТМЕНА, или файл действителен)
0 голосов
/ 01 февраля 2012

А как насчет этого решения: он открывает средство выбора файлов и проверяет, не было ли CANCEL_OPTION.Если проверка правильности XML-файла прошла успешно, то вы break в цикле while.

    JFileChooser fc = new JFileChooser();
    int returnVal = -1;

    while (returnVal != JFileChooser.CANCEL_OPTION) {
        returnVal = fc.showOpenDialog(putYourParentObjectHere);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            if (doYourCheckIfCorrectXMLFileWasChosenHere) {
                // do the stuff you want
                break;   
            }
        }
    }
0 голосов
/ 01 февраля 2012

Продолжайте открывать диалоговое окно до тех пор, пока не будет нажата кнопка отмены или выбран правильный файл. Вы должны реализовать isValidFile самостоятельно:

do {
    int returnVal = chooser.showOpenDialog(parent);
} while (returnVal != JFileChooser.CANCEL_OPTION || !isValidFile(chooser.getSelectedFile()));
...