package org.limewire.ui.swing.nav; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeListener; import javax.swing.AbstractAction; import javax.swing.Action; public class NavigatorUtils { public static final String NAV_ITEM = "limewire.navigator.NAV_ITEM"; private NavigatorUtils() { } /** * Returns an {@link Action} that is synchronized with the {@link NavItem}. * When the {@link NavItem} is selected, the button's SELECTED_KEY property * is set to true (and when unselected, it is set to false). When the * action's SELECTED_KEY is set to true or * {@link ActionListener#actionPerformed(ActionEvent)} is called, the item * is selected. */ public static Action getNavAction(final NavItem item) { return new AbstractAction() { { item.addNavItemListener(new NavItemListener() { public void itemRemoved(boolean wasSelected) { } public void itemSelected(boolean selected) { putValue(SELECTED_KEY, selected); } }); addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { if (evt.getPropertyName().equals(SELECTED_KEY)) { if (evt.getNewValue().equals(Boolean.TRUE)) { item.select(); } } } }); putValue(NAV_ITEM, item); } @Override public void actionPerformed(ActionEvent e) { item.select(); } }; } }