/* * $Id$ * * Copyright (c) 2000-2003 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ /* * Created by IntelliJ IDEA. * User: rkinney * Date: Jul 20, 2002 * Time: 3:52:36 AM * To change template for new class use * Code Style | Class Templates options (Tools | IDE Options). */ package VASSAL.build.module.gamepieceimage; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.Box; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import VASSAL.configure.Configurer; /** * A Configurer that returns a String from among a list of possible values */ public class StringEnumConfigurer extends Configurer { protected String[] validValues; protected JComboBox box; protected Box panel; public StringEnumConfigurer(String key, String name, String[] validValues) { super(key, name); this.validValues = validValues; } public Component getControls() { if (panel == null) { panel = Box.createHorizontalBox(); panel.add(new JLabel(name)); box = getComboBox(); if (isValidValue(getValue())) { box.setSelectedItem(getValue()); } else if (validValues.length > 0) { box.setSelectedIndex(0); } box.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { noUpdate = true; setValue(box.getSelectedItem()); noUpdate = false; } }); panel.add(box); } return panel; } public JComboBox getComboBox() { JComboBox b = new JComboBox(validValues); b.setMaximumSize(new Dimension(b.getMaximumSize().width,b.getPreferredSize().height)); return b; } public boolean isValidValue(Object o) { for (int i = 0; i < validValues.length; ++i) { if (validValues[i].equals(o)) { return true; } } return false; } public String[] getValidValues() { return validValues; } public void setValidValues(String[] s) { validValues = s; box.setModel(new DefaultComboBoxModel(validValues)); } public void setValue(Object o) { if (validValues == null || isValidValue(o)) { super.setValue(o); if (!noUpdate && box != null) { box.setSelectedItem(o); } } } public String getValueString() { return box != null ? (String) box.getSelectedItem() : validValues[0]; } public void setValue(String s) { setValue((Object) s); } public static void main(String[] args) { JFrame f = new JFrame(); StringEnumConfigurer c = new StringEnumConfigurer(null, "Pick one: ", new String[]{"one", "two", "three"}); //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ c.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { System.err.println(evt.getPropertyName() + " = " + evt.getNewValue()); //$NON-NLS-1$ } }); f.add(c.getControls()); f.pack(); f.setVisible(true); } }