Java tutorial
/* * SleepArchiver - cross-platform data manager for Sleeptracker-series watches. * Copyright (C) 2009-2011 Pavel Fatin <http://pavelfatin.com> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.pavelfatin.sleeparchiver.gui.preferences; import com.jgoodies.forms.layout.CellConstraints; import com.pavelfatin.sleeparchiver.model.Language; import com.pavelfatin.sleeparchiver.model.Preferences; import com.pavelfatin.sleeparchiver.swing.Builder; import com.pavelfatin.sleeparchiver.swing.MyDialog; import com.pavelfatin.sleeparchiver.swing.NamedRenderer; import com.pavelfatin.sleeparchiver.swing.NamedValue; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; public class PreferencesDialog extends MyDialog { private Preferences _preferences; private JComboBox _language; private JCheckBox _backups; private JCheckBox _prefill; private JCheckBox _historyEnabled; private JSpinner _historyLimit; private JCheckBox _openRecent; private JLabel _labelHistoryLimit; public PreferencesDialog(JFrame frame, Preferences preferences) { super(frame, "dialogPreferences", true); _preferences = preferences; setContent(createControls()); updateUI(_preferences); updateHistoryEnablement(); } private void updateHistoryEnablement() { boolean b = _historyEnabled.isSelected(); _historyLimit.setEnabled(b); _labelHistoryLimit.setEnabled(b); _openRecent.setEnabled(b); } private void updateUI(Preferences preferences) { _language.setSelectedItem(toNamed(preferences.getLanguage())); _backups.setSelected(preferences.isBackupsEnabled()); _prefill.setSelected(preferences.isPrefillEnabled()); _historyEnabled.setSelected(preferences.isHistoryEnabled()); _historyLimit.setValue(preferences.getHistoryLimit()); _openRecent.setSelected(preferences.isOpenRecentEnabled()); } private void update(Preferences preferences) { Language language = ((NamedValue<Language>) _language.getSelectedItem()).getValue(); preferences.setLanguage(language); preferences.setBackupsEnabled(_backups.isSelected()); preferences.setPrefillEnabled(_prefill.isSelected()); preferences.setHistoryEnabled(_historyEnabled.isSelected()); preferences.setHistoryLimit((Integer) _historyLimit.getValue()); preferences.setOpenRecentEnabled(_openRecent.isSelected()); } private JPanel createControls() { Builder b = new Builder("default:grow", "default, 6dlu, default"); b.add(createSection("separatorGeneral", createGeneral()), 1, 1); b.add(createSection("separatorHistory", createHistory()), 1, 3); return b.getPanel(); } private JPanel createSection(String name, JPanel content) { Builder b = new Builder("6dlu, default:grow, 6dlu", "default, $lgap, default"); b.add(b.createSeparator(name), 1, 1, 3); b.add(content, 2, 3); return b.getPanel(); } private JPanel createGeneral() { Builder b = new Builder("default:grow", "default, 3 * ($lgap, default)"); _language = b.createComboBox("comboboxLanguage"); _language.setRenderer(new NamedRenderer()); DefaultComboBoxModel model = new DefaultComboBoxModel(); for (Language each : Language.values()) { model.addElement(toNamed(each)); } _language.setModel(model); _backups = b.createCheckBox("checkboxBackups"); _prefill = b.createCheckBox("checkboxPrefill"); JLabel asterisk = b.createLabel("labelAsterisk"); asterisk.setVerticalAlignment(SwingConstants.TOP); b.add(b.createLine(b.createLabel("labelLanguage", _language), _language, asterisk), 1, 1); b.add(b.createLabel("labelFootnote"), 1, 3, 1, 1, CellConstraints.RIGHT, CellConstraints.DEFAULT); b.add(_backups, 1, 5); b.add(_prefill, 1, 7); return b.getPanel(); } private JPanel createHistory() { Builder b = new Builder("default:grow", "default, 2 * ($lgap, default)"); _historyEnabled = b.createCheckBox("checkboxHistoryEnabled"); _historyEnabled.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateHistoryEnablement(); } }); _openRecent = b.createCheckBox("checkboxOpenRecent"); _historyLimit = b.createSpinner("spinnerHistoryLimit"); _historyLimit.setModel(new SpinnerNumberModel(1, 1, 15, 1)); _labelHistoryLimit = b.createLabel("labelHistoryLimit", _historyLimit); b.add(_historyEnabled, 1, 1); b.add(b.createLine("6dlu", _openRecent), 1, 3); b.add(b.createLine("6dlu", _labelHistoryLimit, _historyLimit), 1, 5); return b.getPanel(); } private NamedValue<Language> toNamed(Language language) { return new NamedValue<Language>(language, language.getName()); } @Override protected void onAccept() { update(_preferences); try { _preferences.save(); } catch (IOException e) { throw new RuntimeException(e); } } }