📄 optionspagebuilder.java
字号:
/* * Created on 02.04.2005 */package net.sourceforge.ganttproject.gui.options;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.ComponentOrientation;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.FocusAdapter;import java.awt.event.FocusEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.util.Date;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.BorderFactory;import javax.swing.ComboBoxModel;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JColorChooser;import javax.swing.JComboBox;import javax.swing.JComponent;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.SpringLayout;import javax.swing.SwingConstants;import javax.swing.UIManager;import javax.swing.border.Border;import javax.swing.border.EmptyBorder;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import net.sourceforge.ganttproject.gui.IPropertySheetBuilder;import net.sourceforge.ganttproject.gui.options.model.BooleanOption;import net.sourceforge.ganttproject.gui.options.model.ChangeValueDispatcher;import net.sourceforge.ganttproject.gui.options.model.ChangeValueEvent;import net.sourceforge.ganttproject.gui.options.model.ChangeValueListener;import net.sourceforge.ganttproject.gui.options.model.ColorOption;import net.sourceforge.ganttproject.gui.options.model.DateOption;import net.sourceforge.ganttproject.gui.options.model.EnumerationOption;import net.sourceforge.ganttproject.gui.options.model.GPOption;import net.sourceforge.ganttproject.gui.options.model.GPOptionGroup;import net.sourceforge.ganttproject.gui.options.model.StringOption;import net.sourceforge.ganttproject.gui.options.model.ValidationException;import net.sourceforge.ganttproject.gui.options.model.WritableStateHint;import net.sourceforge.ganttproject.language.GanttLanguage;import org.jdesktop.swing.JXDatePicker;/** * @author bard */public class OptionsPageBuilder implements IPropertySheetBuilder { protected static final Color INVALID_FIELD_COLOR = Color.RED.brighter(); I18N myi18n = new I18N(); private Component myParentComponent; public OptionsPageBuilder() { this(null); } public OptionsPageBuilder(Component parentComponent) { myParentComponent = parentComponent; } public void setI18N(I18N i18n) { myi18n = i18n; } public I18N getI18N() { return myi18n; } public void setOptionKeyPrefix(String optionKeyPrefix) { myi18n.setOptionKeyPrefix(optionKeyPrefix); } public JComponent buildPage(GPOptionGroup[] optionGroups, String pageID) { JPanel result = new JPanel(new BorderLayout()); result.setBorder(new EmptyBorder(0, 5, 0, 5)); TopPanel topPanel = new TopPanel(myi18n.getPageTitle(pageID), myi18n .getPageDescription(pageID)); topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); result.add(topPanel, BorderLayout.NORTH); JComponent planePage = buildPlanePage(optionGroups); result.add(planePage, BorderLayout.CENTER); return result; } public JComponent buildPlanePage(GPOptionGroup[] optionGroups) { final JComponent optionsPanel = new JPanel(new SpringLayout()); for (int i = 0; i < optionGroups.length; i++) { optionsPanel.add(createGroupComponent(optionGroups[i])); } SpringUtilities.makeCompactGrid(optionsPanel, optionGroups.length, 1, 0, 0, 5, 5); JPanel resultPanel = new JPanel(new BorderLayout()); resultPanel.add(optionsPanel, BorderLayout.NORTH); resultPanel.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { optionsPanel.getComponent(0).requestFocus(); } }); return resultPanel; } public JComponent createGroupComponent(GPOptionGroup group) { JPanel optionsPanel = new JPanel(new SpringLayout()); if (group.isTitled()) { Border lineBorder = BorderFactory.createMatteBorder(1,0,0,0,Color.BLACK); optionsPanel.setBorder(BorderFactory.createTitledBorder(lineBorder,myi18n .getOptionGroupLabel(group))); } GPOption[] options = group.getOptions(); for (int i = 0; i < options.length; i++) { final GPOption nextOption = options[i]; final Component nextComponent = createOptionComponent(nextOption); if (needsLabel(nextOption)) { /* Component nextLabel =createOptionLabel(options[i]); optionsPanel.add(nextLabel); */ JPanel labelPanel = new JPanel(new BorderLayout()); labelPanel.add(createOptionLabel(options[i]), BorderLayout.WEST); final WritableStateHint writableStateHint = (WritableStateHint) nextOption.getUIHint(WritableStateHint.class); if (writableStateHint!=null) { final JLabel iconLabel = new JLabel(); iconLabel.addMouseListener(new MouseAdapter() { boolean isWritable = writableStateHint.isWritable(); final Icon myLockedIcon = new ImageIcon(getClass().getResource("/icons/status/locked.png")); final Icon myUnlockedIcon = new ImageIcon(getClass().getResource("/icons/status/unlocked.png")); { iconLabel.setIcon(getIcon()); nextOption.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (WritableStateHint.PROPERTY_IS_WRITABLE.equals(evt.getPropertyName())) { isWritable = writableStateHint.isWritable(); iconLabel.setIcon(getIcon()); } } }); } private Icon getIcon() { return isWritable ? myUnlockedIcon : myLockedIcon; } public void mouseClicked(MouseEvent e) { if (writableStateHint.trySetWritable(!isWritable).isOK()) { writableStateHint.setWritable(!isWritable); } } }); labelPanel.add(iconLabel, BorderLayout.EAST); } optionsPanel.add(labelPanel); optionsPanel.add(nextComponent); } else { optionsPanel.add(nextComponent); optionsPanel.add(new JPanel()); } if (i==0) { optionsPanel.addFocusListener(new FocusAdapter() { public void focusGained(FocusEvent e) { super.focusGained(e); nextComponent.requestFocus(); } }); } } if (options.length > 0) { SpringUtilities.makeCompactGrid(optionsPanel, options.length, 2, 0, 0, 3, 3); } return optionsPanel; } private boolean needsLabel(GPOption nextOption) { //return false==nextOption instanceof BooleanOption; return true; } public Component createStandaloneOptionPanel(GPOption option) { JPanel optionPanel = new JPanel(new BorderLayout()); Component optionComponent = createOptionComponent(option); if (needsLabel(option)) { optionPanel.add(createOptionLabel(option), BorderLayout.WEST); optionPanel.add(optionComponent, BorderLayout.CENTER); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -