add a little bit better support for validating user entered settings

This commit is contained in:
Gered 2016-01-16 11:39:58 -05:00
parent 5242d629a5
commit a477926c99
3 changed files with 40 additions and 11 deletions

View file

@ -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();
}
}

View file

@ -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;
}
}

View file

@ -20,7 +20,7 @@ abstract class SettingsTab extends JPanel {
checkBoxes = new HashMap<String, SCheckBox>();
}
abstract void doDelayedSettingChange();
abstract void doDelayedSettingChange() throws InvalidSettingException;
protected class SCheckBox extends LinkedCheckBox {