📄 defaultcontainer.java
字号:
package org.j3de.ui.impl;
import java.rmi.RemoteException;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Group;
import javax.media.j3d.Node;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Transform3D;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;
import org.j3de.exception.ExceptionHandler;
import org.j3de.ui.LayoutManager3D;
import org.j3de.ui.LayoutConstraint;
import org.j3de.ui.UIContainer;
import org.j3de.ui.UIElement;
import org.j3de.ui.UILocalElement;
import org.j3de.ui.UIElementMapper;
import org.j3de.ui.Skin;
import org.j3de.ui.Skinable;
import org.j3de.ui.SkinException;
import org.j3de.ui.skin.SkinLayoutManagerUnconstrained;
public class DefaultContainer implements UILocalElement, Skinable {
private BranchGroup bg;
private Class layoutManagerClass;
private LayoutManager3D layoutManager;
private UILocalElement localElement;
private RemoteContainer remoteContainer;
private UIElementMapper elementMapper;
private Skin skin;
private BoundsChangeHelper boundsHelper;
private ChangeListener boundsChangeListener = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
updateBounds();
}
};
public DefaultContainer(UIElementMapper elementMapper) {
this.elementMapper = elementMapper;
this.layoutManagerClass = SkinLayoutManagerUnconstrained.class;
boundsHelper = new BoundsChangeHelper(this);
bg = new BranchGroup();
bg.setCapability(Group.ALLOW_CHILDREN_READ);
bg.setCapability(Group.ALLOW_CHILDREN_WRITE);
bg.setCapability(Group.ALLOW_CHILDREN_EXTEND);
bg.setBoundsAutoCompute(false);
bg.setCapability(BranchGroup.ALLOW_BOUNDS_WRITE);
bg.setCapability(BranchGroup.ALLOW_BOUNDS_READ);
remoteContainer = getRemoteContainer();
}
public void setSkin(Skin skin) throws SkinException {
this.skin = skin;
layoutManagerChanged();
}
private void layoutManagerChanged() {
if (layoutManager != null)
layoutManager.removeBoundsChangeListener(boundsChangeListener);
try {
layoutManager = skin.getLayoutManager(layoutManagerClass);
} catch (SkinException e) {
// we didn't get a layoutmanager. perhaps the previous one is
// valid, so log error and try to continue without changing the
// layoutmanager
ExceptionHandler.handleException(e);
layoutManager.addBoundsChangeListener(boundsChangeListener);
return;
}
// TODO : UIELements have to be moved from old to new LayoutManager
// Currently all elements disappear
for (int i=0; i<bg.numChildren(); i++) {
if (bg.getChild(i) instanceof LayoutManager3D)
bg.removeChild(i);
}
layoutManager.setElementMapper(elementMapper);
bg.addChild(layoutManager);
// Add BoundsChangeListener to the layoutManager
layoutManager.addBoundsChangeListener(boundsChangeListener);
updateBounds();
}
protected RemoteContainer getRemoteContainer() {
return new RemoteContainer();
}
public Node getNode() {
return bg;
}
public UIElement getRemoteElement() {
return remoteContainer;
}
private void updateBounds() {
bg.setBounds(layoutManager.getBounds());
boundsHelper.updateBounds();
}
public void addBoundsChangeListener(ChangeListener listener) {
boundsHelper.addBoundsChangeListener(listener);
}
public void removeBoundsChangeListener(ChangeListener listener) {
boundsHelper.removeBoundsChangeListener(listener);
}
protected class RemoteContainer implements UIContainer {
public void add(UIElement element) throws RemoteException {
layoutManager.add(element);
}
public void remove(UIElement element) throws RemoteException {
layoutManager.remove(element);
}
public void setLayoutManager(Class layoutManagerClass) {
DefaultContainer.this.layoutManagerClass = layoutManagerClass;
DefaultContainer.this.layoutManagerChanged();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -