package glitcherator; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.Locale; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import javax.swing.BorderFactory; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; public class GlitchPrefsFrame extends JFrame { private static final long serialVersionUID = 6689879634112896433L; private Preferences prefs = Preferences.userNodeForPackage(glitcherator.App.class); public static final String SAVE_PATH_KEY = "save_path"; public static final String SAVE_PATH_VAL = System.getProperty("user.dir"); public static final String APP_LOCALE_KEY = "app_locale"; public static final String APP_LOCALE_VAL = Locale.getDefault().toString(); public GlitchPrefsFrame(String name) { super(name); initPrefs(); pack(); } private void initPrefs() { JPanel mainPane = new JPanel(); mainPane.setBorder(BorderFactory.createEmptyBorder(15, 25, 15, 25)); JLabel language = new JLabel(App.bundle.getString("prefs.language")); mainPane.add(language); ActionListener l = new PrefActionListener(); String[] labels = { "nl_NL", "en_US" }; JComboBox jcb = new JComboBox(labels); jcb.setSelectedItem(prefs.get(APP_LOCALE_KEY, APP_LOCALE_VAL)); jcb.setActionCommand("changeLang"); jcb.addActionListener(l); mainPane.add(jcb); JLabel path = new JLabel(App.bundle.getString("prefs.path")); mainPane.add(path); JTextField jtf = new JTextField(prefs.get(SAVE_PATH_KEY, SAVE_PATH_VAL)); jtf.setColumns(12); jtf.setActionCommand("setPath"); PrefCaretListener cl = new PrefCaretListener(); jtf.addCaretListener(cl); mainPane.add(jtf); add(mainPane); } class PrefActionListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); JComboBox jcb = (JComboBox) e.getSource(); if (command == "changeLang") { String locale = (String) jcb.getSelectedItem(); prefs.put(APP_LOCALE_KEY, locale); } } } class PrefCaretListener implements CaretListener { @Override public void caretUpdate(CaretEvent e) { JTextField s = (JTextField) e.getSource(); String path = s.getText(); File f = new File(path); boolean exists = f.exists(); if (!exists) { s.setBorder(BorderFactory.createLineBorder(Color.RED)); } if (exists) { s.setBorder(BorderFactory.createLineBorder(Color.GREEN)); prefs.put(SAVE_PATH_KEY, path); try { prefs.flush(); } catch (BackingStoreException e1) { // silently fail System.out.println("could not store prefs"); } } } } }