Swing Action Demo
/* Definitive Guide to Swing for Java 2, Second Edition By John Zukowski ISBN: 1-893115-78-X Publisher: APress */ import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemListener; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Arrays; import java.util.Comparator; import java.util.Enumeration; import java.util.Vector; import javax.swing.AbstractButton; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JTextPane; import javax.swing.border.Border; import javax.swing.event.ChangeListener; import javax.swing.text.JTextComponent; public class ListActions { public static void main(String args[]) { JFrame frame = new JFrame("TextAction List"); Container contentPane = frame.getContentPane(); String components[] = { "JTextField", "JPasswordField", "JTextArea", "JTextPane", "JEditorPane" }; final JTextArea textArea = new JTextArea(); textArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(textArea); contentPane.add(scrollPane, BorderLayout.CENTER); ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { // Determine which component selected String command = actionEvent.getActionCommand(); JTextComponent component = null; if (command.equals("JTextField")) { component = new JTextField(); } else if (command.equals("JPasswordField")) { component = new JPasswordField(); } else if (command.equals("JTextArea")) { component = new JTextArea(); } else if (command.equals("JTextPane")) { component = new JTextPane(); } else { component = new JEditorPane(); } // Process action list Action actions[] = component.getActions(); // Java 2 specific code to sort Comparator comparator = new Comparator() { public int compare(Object a1, Object a2) { int returnValue = 0; if ((a1 instanceof Action) && (a2 instanceof Action)) { String firstName = (String) ((Action) a1) .getValue(Action.NAME); String secondName = (String) ((Action) a2) .getValue(Action.NAME); returnValue = firstName.compareTo(secondName); } return returnValue; } }; Arrays.sort(actions, comparator); // end Java 2 specific code StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw, true); int count = actions.length; pw.println("Count: " + count); for (int i = 0; i < count; i++) { pw.print(actions[i].getValue(Action.NAME)); pw.print(" : "); pw.println(actions[i].getClass().getName()); } pw.close(); textArea.setText(sw.toString()); textArea.setCaretPosition(0); } }; final Container componentsContainer = RadioButtonUtils .createRadioButtonGrouping(components, "Pick to List Actions", actionListener); contentPane.add(componentsContainer, BorderLayout.WEST); frame.setSize(400, 250); frame.setVisible(true); } } class RadioButtonUtils { private RadioButtonUtils() { // private constructor so you can't create instances } public static Enumeration getSelectedElements(Container container) { Vector selections = new Vector(); Component components[] = container.getComponents(); for (int i = 0, n = components.length; i < n; i++) { if (components[i] instanceof AbstractButton) { AbstractButton button = (AbstractButton) components[i]; if (button.isSelected()) { selections.addElement(button.getText()); } } } return selections.elements(); } public static Container createRadioButtonGrouping(String elements[]) { return createRadioButtonGrouping(elements, null, null, null, null); } public static Container createRadioButtonGrouping(String elements[], String title) { return createRadioButtonGrouping(elements, title, null, null, null); } public static Container createRadioButtonGrouping(String elements[], String title, ItemListener itemListener) { return createRadioButtonGrouping(elements, title, null, itemListener, null); } public static Container createRadioButtonGrouping(String elements[], String title, ActionListener actionListener) { return createRadioButtonGrouping(elements, title, actionListener, null, null); } public static Container createRadioButtonGrouping(String elements[], String title, ActionListener actionListener, ItemListener itemListener) { return createRadioButtonGrouping(elements, title, actionListener, itemListener, null); } public static Container createRadioButtonGrouping(String elements[], String title, ActionListener actionListener, ItemListener itemListener, ChangeListener changeListener) { JPanel panel = new JPanel(new GridLayout(0, 1)); // If title set, create titled border if (title != null) { Border border = BorderFactory.createTitledBorder(title); panel.setBorder(border); } // Create group ButtonGroup group = new ButtonGroup(); JRadioButton aRadioButton; // For each String passed in: // Create button, add to panel, and add to group for (int i = 0, n = elements.length; i < n; i++) { aRadioButton = new JRadioButton(elements[i]); panel.add(aRadioButton); group.add(aRadioButton); if (actionListener != null) { aRadioButton.addActionListener(actionListener); } if (itemListener != null) { aRadioButton.addItemListener(itemListener); } if (changeListener != null) { aRadioButton.addChangeListener(changeListener); } } return panel; } }