diff --git a/src/main/java/org/fenix/llanfair/dialog/EditSettings.java b/src/main/java/org/fenix/llanfair/dialog/EditSettings.java index fe49fff..6634ca1 100644 --- a/src/main/java/org/fenix/llanfair/dialog/EditSettings.java +++ b/src/main/java/org/fenix/llanfair/dialog/EditSettings.java @@ -8,10 +8,7 @@ import java.awt.event.WindowListener; import java.util.ArrayList; import java.util.List; -import javax.swing.JButton; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; +import javax.swing.*; import org.fenix.llanfair.Language; import org.fenix.llanfair.config.Settings; @@ -53,6 +50,7 @@ public class EditSettings extends LlanfairDialog settingsTabs.add(new TabHistory()); settingsTabs.add(new TabComponents()); + this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); createResources(); placeComponents(); setPersistentBehavior(); @@ -121,10 +119,16 @@ public class EditSettings extends LlanfairDialog public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source.equals(actionOK)) { - for (SettingsTab tab : settingsTabs) { - tab.doDelayedSettingChange(); + try { + for (SettingsTab tab : settingsTabs) { + tab.doDelayedSettingChange(); + } + dispose(); + } catch (InvalidSettingException ex) { + ex.tab.requestFocusInWindow(); + ex.field.requestFocusInWindow(); + JOptionPane.showMessageDialog(this, ex.getMessage(), Language.ERROR.get(), JOptionPane.ERROR_MESSAGE); } - dispose(); } else if (source.equals(reset)) { int option = JOptionPane.showConfirmDialog(this, "" + Language.WARN_RESET_SETTINGS); @@ -144,10 +148,15 @@ public class EditSettings extends LlanfairDialog @Override public void windowOpened(WindowEvent e) {} @Override public void windowClosing(WindowEvent e) { - for (SettingsTab tab : settingsTabs) { - tab.doDelayedSettingChange(); + try { + for (SettingsTab tab : settingsTabs) { + tab.doDelayedSettingChange(); + } + dispose(); + } catch (InvalidSettingException ex) { + ex.tab.grabFocus(); + JOptionPane.showMessageDialog(this, ex.getMessage(), Language.ERROR.get(), JOptionPane.ERROR_MESSAGE); } - dispose(); } } diff --git a/src/main/java/org/fenix/llanfair/dialog/InvalidSettingException.java b/src/main/java/org/fenix/llanfair/dialog/InvalidSettingException.java new file mode 100644 index 0000000..910cbf3 --- /dev/null +++ b/src/main/java/org/fenix/llanfair/dialog/InvalidSettingException.java @@ -0,0 +1,20 @@ +package org.fenix.llanfair.dialog; + +import java.awt.*; + +public class InvalidSettingException extends Exception { + public final SettingsTab tab; + public final Component field; + + public InvalidSettingException(SettingsTab tab, Component field, String message) { + super(message); + this.tab = tab; + this.field = field; + } + + public InvalidSettingException(SettingsTab tab, Component field, String message, Throwable cause) { + super(message, cause); + this.tab = tab; + this.field = field; + } +} diff --git a/src/main/java/org/fenix/llanfair/dialog/SettingsTab.java b/src/main/java/org/fenix/llanfair/dialog/SettingsTab.java index 9cc7dc6..4cbd2c4 100644 --- a/src/main/java/org/fenix/llanfair/dialog/SettingsTab.java +++ b/src/main/java/org/fenix/llanfair/dialog/SettingsTab.java @@ -20,7 +20,7 @@ abstract class SettingsTab extends JPanel { checkBoxes = new HashMap(); } - abstract void doDelayedSettingChange(); + abstract void doDelayedSettingChange() throws InvalidSettingException; protected class SCheckBox extends LinkedCheckBox {