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

📄 resizelistener.java

📁 定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而
💻 JAVA
字号:
/*
 * Created on Apr 18, 2005
 */
package org.flexdock.dockbar.event;

import java.awt.Component;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import org.flexdock.dockbar.DockbarManager;
import org.flexdock.dockbar.ViewPane;
import org.flexdock.dockbar.layout.DockbarLayout;
import org.flexdock.dockbar.layout.DockbarLayoutManager;
import org.flexdock.docking.Dockable;
import org.flexdock.docking.props.DockablePropertySet;
import org.flexdock.docking.state.MinimizationManager;
import org.flexdock.util.RootWindow;

/**
 * @author Christopher Butler
 */
public class ResizeListener extends MouseAdapter implements MouseMotionListener {
	private DockbarManager manager;
	private Dockable dockable;
	
	private JPanel dragGlassPane;
	private Component cachedGlassPane;
	private RootWindow rootWindow;
	
	public ResizeListener(DockbarManager mgr) {
		manager = mgr;
		dragGlassPane = new JPanel();
		dragGlassPane.setOpaque(false);
	}
	
	public void mouseMoved(MouseEvent e) {
		// noop
	}
	
	public void mousePressed(MouseEvent e) {
		dockable = manager.getActiveDockable();
		rootWindow = manager.getWindow();
		cachedGlassPane = rootWindow.getGlassPane();
		rootWindow.setGlassPane(dragGlassPane);
		dragGlassPane.setCursor(manager.getResizeCursor());
		dragGlassPane.setVisible(true);
		manager.setDragging(true);
	}
	
	public void mouseReleased(MouseEvent e) {
		dockable = null;
		dragGlassPane.setVisible(false);
		manager.setDragging(false);
		
		if(rootWindow!=null && cachedGlassPane!=null) {
			rootWindow.setGlassPane(cachedGlassPane);
			cachedGlassPane = null;
			rootWindow = null;			
		}
	}
	
	public void mouseDragged(MouseEvent e) {
		if(dockable!=null)
			handleResizeEvent(e);
	}
	
	private void handleResizeEvent(MouseEvent me) {
		ViewPane viewPane = manager.getViewPane();
		Point p = SwingUtilities.convertPoint((Component)me.getSource(), me.getPoint(), viewPane.getParent());
		Rectangle viewArea = DockbarLayoutManager.getManager().getViewArea(manager, dockable); 
		
		p.x = Math.max(p.x, 0);
		p.x = Math.min(p.x, viewArea.width);
		p.y = Math.max(p.y, 0);
		p.y = Math.min(p.y, viewArea.height);
		
		int orientation = manager.getActiveEdge();
		int loc = orientation==MinimizationManager.LEFT || orientation==MinimizationManager.RIGHT? p.x: p.y;
		int dim = orientation==MinimizationManager.LEFT || orientation==MinimizationManager.RIGHT? viewArea.width: viewArea.height;
		
		if(orientation==MinimizationManager.RIGHT || orientation==MinimizationManager.BOTTOM)
			loc = dim - loc;
		
		float percent = (float)loc/(float)dim;
		float minPercent = (float)DockbarLayout.MINIMUM_VIEW_SIZE/(float)dim;
		percent = Math.max(percent, minPercent);
		
		DockablePropertySet props = dockable.getDockingProperties();
		props.setPreviewSize(percent);
		manager.revalidate();
	}

}

⌨️ 快捷键说明

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