⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floatingdockingport.java

📁 定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而
💻 JAVA
字号:
/*
 * Created on Mar 10, 2005
 */
package org.flexdock.docking.floating.frames;

import java.awt.Component;
import java.awt.Point;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import javax.swing.JTabbedPane;

import org.flexdock.docking.Dockable;
import org.flexdock.docking.DockingManager;
import org.flexdock.docking.defaults.DefaultDockingPort;
import org.flexdock.docking.event.DockingEvent;

/**
 * @author Christopher Butler
 */
public class FloatingDockingPort extends DefaultDockingPort {
    private static final Set EMPTY_SET = new HashSet(0);
    protected DockingFrame frame;
    protected FrameDragListener dragListener;
    
    public FloatingDockingPort(DockingFrame frame, String persistentId) {
        super(persistentId);
        getDockingProperties().setSingleTabsAllowed(true);
        setTabsAsDragSource(true);
        this.frame = frame;
        dragListener = new FrameDragListener(frame);
    }
    
    public String getRegion(Point p) {
        // only allow docking in CENTER
        return CENTER_REGION;
    }
    
    public boolean isDockingAllowed(String region, Component comp) {
        // only allow docking in CENTER
        if(!CENTER_REGION.equals(region))
            return false;
        return super.isDockingAllowed(comp, region);
    }
    
    public boolean dock(Dockable dockable, String region) {	// only dock to the CENTER region
        boolean ret = super.dock(dockable, CENTER_REGION);
        if(ret) {
            toggleListeners(dockable.getComponent(), true);
        }
        return ret;
    }
    
    public boolean undock(Component comp) {
        boolean ret = super.undock(comp);
        if(ret)
            toggleListeners(comp, false);
        return ret;
    }
    
    public void dragStarted(DockingEvent evt) {
        super.dragStarted(evt);
        
        Component dragSrc = (Component)evt.getTriggerSource();
        Dockable dockable = (Dockable)evt.getSource();
        
        boolean listenerEnabled = getFrameDragSources(dockable).contains(dragSrc);
        dragListener.setEnabled(listenerEnabled);
        if(listenerEnabled) {
            evt.consume();
        }
    }
    
    public void undockingComplete(DockingEvent evt) {
        super.undockingComplete(evt);
        if(evt.getOldDockingPort()==this && getDockableCount()==0) {
            frame.destroy();
            frame = null;
        }
    }
    
    protected void toggleListeners(Component comp, boolean add) {
        Dockable dockable = DockingManager.getDockable(comp);
        if(add)
            installListeners(dockable);
        else
            uninstallListeners(dockable);
    }
    
    protected void installListeners(Dockable dockable) {
        Set frameDraggers = getFrameDragSources(dockable);
        for(Iterator it=frameDraggers.iterator(); it.hasNext();) {
            Component frameDragSrc = (Component)it.next();
            frameDragSrc.addMouseListener(dragListener);
            frameDragSrc.addMouseMotionListener(dragListener);			
        }
        
        dockable.addDockingListener(this);
    }
    
    protected void uninstallListeners(Dockable dockable) {
        Set frameDraggers = getFrameDragSources(dockable);
        for(Iterator it=frameDraggers.iterator(); it.hasNext();) {
            Component frameDragSrc = (Component)it.next();
            frameDragSrc.removeMouseListener(dragListener);
            frameDragSrc.removeMouseMotionListener(dragListener);			
        }
        dockable.removeDockingListener(this);
    }
    
    public int getDockableCount() {
        Component comp = getDockedComponent();
        if(!(comp instanceof JTabbedPane))
            return 0;
        return ((JTabbedPane)comp).getTabCount();
    }
    
    protected Set getFrameDragSources(Dockable dockable) {
    	Set set = dockable==null? null: dockable.getFrameDragSources();
    	return set==null? EMPTY_SET: set;
    }
    
}

⌨️ 快捷键说明

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