defaultactionelement.java

来自「Java 3D Desktop Environment旨在使用Java 3D来创」· Java 代码 · 共 130 行

JAVA
130
字号
package org.j3de.ui.impl; 

import java.awt.event.ActionEvent;  
import java.rmi.RemoteException;

import javax.swing.event.ChangeListener;    
import javax.swing.event.ChangeEvent;

import javax.media.j3d.BranchGroup;
import javax.media.j3d.Group;      
import javax.media.j3d.Node;      

import javax.vecmath.Point3f;

import javax.swing.event.EventListenerList;

import org.j3de.events.J3deFocusListener;
import org.j3de.events.RemoteActionListener;
import org.j3de.exception.ExceptionHandler;
import org.j3de.ui.ActionElement;
import org.j3de.ui.Border3D;
import org.j3de.ui.UIElement;
import org.j3de.ui.UIElementMapper;
import org.j3de.ui.UILocalElement;

public class DefaultActionElement implements UILocalElement  {   
  private UIElement         contents;                   
  private EventListenerList listenerList;
  private UIElementMapper   elementMapper;                         
 
  private BranchGroup       bg;    
  private BranchGroup       contentsBranchGroup;
  
  private ActionEvent       actionEvent = null;
  private ActionElement     remoteActionElement;
  
  private ActionElementUserData userData; 
  
  public DefaultActionElement(UIElementMapper elementMapper) {
    this.listenerList   = new EventListenerList();
    this.elementMapper  = elementMapper;    
    remoteActionElement = new RemoteActionElement();   
    
    userData = new ActionElementUserData();     

    bg = new BranchGroup();
    bg.setCapability(Group.ALLOW_CHILDREN_READ);
    bg.setCapability(Group.ALLOW_CHILDREN_WRITE);
    bg.setCapability(Group.ALLOW_CHILDREN_EXTEND);       
    bg.setCapability(Group.ENABLE_PICK_REPORTING);
    
    bg.setUserData(userData);
  }
        
  protected void fireActionEvent() {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
      if (listeners[i]==RemoteActionListener.class) {                      
      
        // Lazily create the event:
        if (actionEvent == null)
          actionEvent = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null); 
        
        try {  
          ((RemoteActionListener)listeners[i+1]).actionPerformed(actionEvent); 
        } catch (RemoteException e) {
          ExceptionHandler.handleException(e);
        }
      }
    }
  }          
  
  public Node getNode() {            
    return bg;                                                                                 
  }
  
  public UIElement getRemoteElement() {
    return remoteActionElement; 
  }

  public void addBoundsChangeListener(ChangeListener listener) {
    elementMapper.getLocal(contents).addBoundsChangeListener(listener);
  }

  public void removeBoundsChangeListener(ChangeListener listener) {
    elementMapper.getLocal(contents).removeBoundsChangeListener(listener);
  }
  
  private class ActionElementUserData implements J3deFocusListener {
    public void focusGained() {   
      fireActionEvent();
    }
    
    public void focusLost() {
    }  
  }
  
  private class RemoteActionElement implements ActionElement {
    
    public void setUIElement(UIElement element) {  
      if (contentsBranchGroup != null)
        contentsBranchGroup.detach();
      
      contents = element;  
      contentsBranchGroup = new BranchGroup();
      contentsBranchGroup.addChild(elementMapper.getLocal(contents).getNode());
   
      bg.addChild(contentsBranchGroup);
    }
  
    public UIElement getUIElement() {     
      return contents;
    }

    public void addActionListener(RemoteActionListener l) {
      listenerList.add(RemoteActionListener.class, l);
    }

    public void removeActionListener(RemoteActionListener l) {
      listenerList.remove(RemoteActionListener.class, l);
    }
    
  }
  
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?