LinkAction.java
上传用户:zhengdagz
上传日期:2014-03-06
资源大小:1956k
文件大小:3k
源码类别:

xml/soap/webservice

开发平台:

Java

  1. /*
  2.  * $Id: LinkAction.java,v 1.5 2005/10/10 18:02:40 rbair Exp $
  3.  *
  4.  * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
  5.  * Santa Clara, California 95054, U.S.A. All rights reserved.
  6.  *
  7.  * This library is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  * 
  12.  * This library is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  * 
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with this library; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  20.  */
  21. package org.jdesktop.swingx.action;
  22. import java.awt.event.ActionEvent;
  23. import java.awt.event.ActionListener;
  24. import java.beans.PropertyChangeEvent;
  25. import java.beans.PropertyChangeListener;
  26. import javax.swing.AbstractAction;
  27. import javax.swing.Action;
  28. import org.jdesktop.swingx.LinkModel;
  29. /**
  30.  * @author Jeanette Winzenburg
  31.  */
  32. public class LinkAction extends AbstractAction {
  33.     
  34.     private LinkModel link;
  35.     private ActionListener delegate;
  36.     public static final String VISIT_ACTION = "visit";
  37.     public static final String VISITED_PROPERTY = LinkModel.VISITED_PROPERTY;
  38.     private PropertyChangeListener linkListener;
  39.     
  40.     public LinkAction(LinkModel link) {
  41.         setLink(link);
  42.     }
  43.     public void setLink(LinkModel link) {
  44.         uninstallLinkListener();
  45.         this.link = link;
  46.         installLinkListener();
  47.         updateFromLink();
  48.     }
  49.     public LinkModel getLink() {
  50.         return link;
  51.     }
  52.     public void setVisitingDelegate(ActionListener delegate) {
  53.         this.delegate = delegate;
  54.     }
  55.     
  56.     public void actionPerformed(ActionEvent e) {
  57.         if ((delegate != null) && (link != null)) {
  58.             delegate.actionPerformed(new ActionEvent(link, ActionEvent.ACTION_PERFORMED, VISIT_ACTION));
  59.         }
  60.         
  61.     }
  62.     private void uninstallLinkListener() {
  63.         if (link == null) return;
  64.         link.removePropertyChangeListener(getLinkListener());
  65.      
  66.     }
  67.     private void updateFromLink() {
  68.         if (link != null) {
  69.             putValue(Action.NAME, link.getText());
  70.             putValue(Action.SHORT_DESCRIPTION, link.getURL().toString());
  71.             putValue(VISITED_PROPERTY, new Boolean(link.getVisited()));
  72.         } else {
  73.             Object[] keys = getKeys();
  74.             if (keys == null) return;
  75.             for (int i = 0; i < keys.length; i++) {
  76.                putValue(keys[i].toString(), null); 
  77.             }
  78.         }
  79.     }
  80.     private void installLinkListener() {
  81.         if (link == null) return;
  82.         link.addPropertyChangeListener(getLinkListener());
  83.     }
  84.     private PropertyChangeListener getLinkListener() {
  85.         if (linkListener == null) {
  86.          linkListener = new PropertyChangeListener() {
  87.             public void propertyChange(PropertyChangeEvent evt) {
  88.                 updateFromLink();
  89.             }
  90.             
  91.         };
  92.         }
  93.         return linkListener;
  94.     }
  95.     
  96. }