/** * SampleWidget1.java * Copyright (C) 2010 New Zealand Digital Library, http://expeditee.org * * 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 . */ package org.expeditee.items.widgets; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.InputVerifier; import javax.swing.JComboBox; import javax.swing.JComponent; import org.expeditee.items.Text; public class SampleWidget1 extends DataFrameWidget { private static final String[] STRINGS = new String[] { "dog", "fish", "cat", "pig" }; //private static final String[] STRINGS = new String[] { "1", "2", "3", "4", "1", "2", "3", "4", "1", "2", "3", "4", "1", "2", "3", "4" }; private JComboBox cmboOptions; public SampleWidget1(Text source, String[] args) { super(source, new JComboBox(STRINGS), 200, 200, 50, 50); cmboOptions = (JComboBox) _swingComponent; final DisplaySelection listener = new DisplaySelection(); cmboOptions.addActionListener(listener); cmboOptions.addItemListener(listener); cmboOptions.addFocusListener(listener); cmboOptions.setInputVerifier(listener); for (Component c : cmboOptions.getComponents()) { c.setFocusable(true); } System.err.println("SampleWidget1::setting light weight popup enabled to false."); cmboOptions.setLightWeightPopupEnabled(false); } private void printParents(final java.awt.Component component) { if(component.getParent() != null) { printParents(component.getParent()); System.err.println("Component: " + component); } else { System.err.println("Component: " + component); } } private final class DisplaySelection extends InputVerifier implements ActionListener, ItemListener, FocusListener { @Override public void actionPerformed(final ActionEvent e) { System.err.println("Selected Item: " + cmboOptions.getSelectedItem()); } @Override public void itemStateChanged(final ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) { //System.err.println("Combobox Selected"); //System.err.println("SampleWidget1::main component children count: " + cmboOptions.getComponents().length); } else if (e.getStateChange() == ItemEvent.DESELECTED) { //System.err.println("Combobox Lost Selection"); //System.err.println("SampleWidget1::main component children count: " + cmboOptions.getComponents().length); } else { //System.err.println("Unexpected Combobox e.getStateChange(): " + e.getStateChange()); } } @Override public void focusGained(FocusEvent e) { //System.err.println("Combobox focus gained"); //System.err.println("Combobox popup visible: " + cmboOptions.isPopupVisible()); //System.err.println("Combobox popup object: " + cmboOptions.getComponentPopupMenu()); } @Override public void focusLost(FocusEvent e) { //System.err.println("Combobox focus lost"); } @Override public boolean verify(JComponent input) { return true; //return !cmboOptions.isPopupVisible(); } } @Override protected String[] getArgs() { String[] stateArgs = new String[1]; stateArgs[0] = Integer.toString(cmboOptions.getSelectedIndex()); return stateArgs; } /** TODO: REVISE @Override public void refresh() { super.refresh(); Frame frame = getDataFrame(); if(frame != null) { _combo.removeAllItems(); for(Text text: frame.getBodyTextItems(false)) { _combo.addItem(text.getText()); } _combo.setSelectedIndex(0); } } */ }