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

📄 demobordermanager.java

📁 定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而
💻 JAVA
字号:
package org.flexdock.demos.raw.border;

import java.awt.Component;

import javax.swing.JComponent;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
import javax.swing.plaf.basic.BasicSplitPaneUI;

import org.flexdock.docking.DockingPort;
import org.flexdock.docking.defaults.BorderManager;
import org.flexdock.docking.defaults.DefaultDockingPort;

public class DemoBorderManager implements BorderManager {
	private Border dummyBorder;

	DemoBorderManager() {
		dummyBorder = new TitledBorder("");
	}

	public void managePortNullChild(DockingPort port) {
		setBorder(port, dummyBorder);
	}

	public void managePortSimpleChild(DockingPort port) {
		if (port == null || port.getDockedComponent() == null)
			return;

		Component docked = port.getDockedComponent();
		setBorder(docked, null);
		setBorder(port, getDesiredBorder(docked));
	}

	public void managePortSplitChild(DockingPort port) {
		if (port == null || !(port.getDockedComponent() instanceof JSplitPane))
			return;

		// clear the borders on the split pane and divider
		JSplitPane split = (JSplitPane)port.getDockedComponent();
		clearSplitPaneBorder(split);
		
		// determine the borders for each child component
		Component left = split.getLeftComponent();
		Component right = split.getRightComponent();
		Border leftBorder = getDesiredBorder(left);
		Border rightBorder = getDesiredBorder(right);

		// set the borders for all interested parties
		setBorder(port, null);
		setBorder(left, null);
		setBorder(right, null);
		setBorder(getDocked(left), leftBorder);
		setBorder(getDocked(right), rightBorder);
	}

	public void managePortTabbedChild(DockingPort port) {
		setBorder(port, null);
		if (port == null || !(port.getDockedComponent() instanceof JTabbedPane))
			return;

		JTabbedPane tabs = (JTabbedPane) port.getDockedComponent();
		int tc = tabs.getTabCount();
		for (int i = 0; i < tc; i++)
			setBorder(tabs.getComponentAt(i), new TitledBorder(tabs.getTitleAt(i)));
	}
	
	
	
	private void clearSplitPaneBorder(JSplitPane split) {
		split.setBorder(null);
		if (split.getUI() instanceof BasicSplitPaneUI) {
			//  grab the divider from the UI and remove the border from it
			BasicSplitPaneDivider divider = ((BasicSplitPaneUI) split.getUI()).getDivider();
			if (divider != null && divider.getBorder() != null)
				divider.setBorder(null);
		}
	}

	private void setBorder(DockingPort port, Border border) {
		if (port instanceof JComponent)
			 ((JComponent) port).setBorder(border);
	}

	private void setBorder(Component cmp, Border border) {
		if (cmp instanceof JComponent)
			 ((JComponent) cmp).setBorder(border);
	}

	// pulls the title out of a DockablePanel to create a titled border.
	// returns the dummy border if a DockablePanel isn't found
	private Border getDesiredBorder(Component cmp) {
		if (cmp instanceof DefaultDockingPort)
			cmp = ((DefaultDockingPort) cmp).getDockedComponent();

		if (cmp instanceof DockablePanel) {
			String title = ((DockablePanel) cmp).getDockable().getDockingProperties().getDockableDesc();
			return new TitledBorder(title);
		}
		return dummyBorder;
	}

	// convenience method for drilling down into a 'potential' docking port
	private Component getDocked(Component c) {
		if (c instanceof DefaultDockingPort)
			return ((DefaultDockingPort) c).getDockedComponent();
		return c;
	}

}

⌨️ 快捷键说明

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