Я пытался перезаписать
public void approveSelection ()
, получив собственный класс от JFileChooser, и, на первый взгляд, это сработало.
Метод вызван, я могу выполнить тест для выбранного файла и, если он потерпит неудачу, вызвать showOpenDialog (ref);
.
Но ...
Работает нормально, когда я вызываю законный файл, и открывает новое диалоговое окно, если нет, но после этого диалоговое окно не закрывается снова нормально, и если принудительно вызвано X окна, я получаю StackTrace напечатан. Поэтому я предполагаю, что состояние диалога здесь критическое - оно не работает, если showOpenDialog вызывается рекурсивно.
Вот один из протестированных мной вариантов:
class ProportionalImageChooser extends JFileChooser
{
private Component ref;
public ProportionalImageChooser (File f)
{
super (f);
}
public int showOpenDialog (Component parent)
{
ref = parent;
return super.showOpenDialog (parent);
}
public void approveSelection () {
System.out.println ("approving selection!");
String fname = getSelectedFile ().getName ();
if (fname.matches (".*e.*")) {
cancelSelection ();
System.out.println ("Dialog: size doesn't match");
showOpenDialog (ref);
}
else super.approveSelection ();
}
}
Чтобы упростить тест, я проверил только имя файла, чтобы включить 'e' или нет.
Поэтому я предлагаю использовать подход Бориса и протестировать файл после завершения диалога. Если это не удается, немедленно откройте новый.