📄 hsplitlayout.java
字号:
package edu.odu.cs.zeil.AlgAE.gui;import edu.odu.cs.zeil.AlgAE.Debug;import java.awt.Component;import java.awt.Container;import java.awt.Dimension;import java.awt.Insets;import java.awt.LayoutManager;import edu.odu.cs.zeil.AlgAE.gui.SplitLayout;public class HSplitLayout implements SplitLayout { private double leftFraction = 0.5; private int leftSize = -1; private int rightSize = -1; private Dimension minSize; private Dimension preferredSize; private Component left; private Component center; private Component right; public HSplitLayout(double leftFract) { leftFraction = leftFract; leftSize = -1; minSize = new Dimension(); preferredSize = null; left = center = right = null; } public void setTopFraction (double fraction) { leftFraction = fraction; leftSize = -1; } public void alterSize (Dimension change) { int leftH = left.getSize().width; int rghtH = right.getSize().width; int h = Math.max(-leftH, Math.min(change.width, rghtH)); leftSize = leftH + h; rightSize = rghtH - h; leftFraction = -1.0; left.invalidate(); right.invalidate(); left.getParent().validate(); } /* Required by LayoutManager. */ public void addLayoutComponent(String name, Component comp) { } /* Required by LayoutManager. */ public void removeLayoutComponent(Component comp) { } private void setSizes(Container target) { if ((preferredSize == null) || (!target.isValid())) { left = target.getComponent(0); center = target.getComponent(1); right = target.getComponent(2); if (preferredSize == null) preferredSize = new Dimension(); Dimension dleft = new Dimension(); Dimension dcenter = new Dimension(); Dimension dright = new Dimension(); // Compute minimum size dleft = left.getMinimumSize(); dcenter = center.getMinimumSize(); dright = left.getMinimumSize(); minSize.height = Math.max (dleft.height, dright.height); minSize.width = dleft.width + dcenter.width + dright.width; // Compute preferred size dleft = left.getPreferredSize(); dright = left.getPreferredSize(); preferredSize.height = Math.max (dleft.height, dright.height); if (leftSize < 0) { leftFraction = (leftFraction < 0.01)? 0.01 : leftFraction; leftFraction = (leftFraction > 0.99)? 0.99 : leftFraction; preferredSize.width = dcenter.width + (int) Math.max (dleft.width / leftFraction, dright.width / (1.0 - leftFraction)); } else { preferredSize.width = leftSize + dcenter.width + rightSize; } Debug.show (Debug.splitters, "HSL preferredSize ", preferredSize); Debug.show (Debug.splitters, "HSL minSize ", minSize); } } /* Required by LayoutManager. */ public Dimension preferredLayoutSize(Container target) { setSizes(target); Insets insets = target.getInsets(); Dimension dim = new Dimension (preferredSize.width + insets.left + insets.right, preferredSize.height + insets.top + insets.bottom); return dim; } /* Required by LayoutManager. */ public Dimension minimumLayoutSize(Container target) { setSizes(target); Insets insets = target.getInsets(); Dimension dim = new Dimension (minSize.width + insets.left + insets.right, minSize.height + insets.top + insets.bottom); return dim; } private void sanityCheck (Dimension proposedSize, Component c) { Dimension minSize = c.getMinimumSize(); Dimension maxSize = c.getMaximumSize(); proposedSize.height = Math.max(minSize.height, Math.min(maxSize.height, proposedSize.height)); proposedSize.width = Math.max(minSize.width, Math.min(maxSize.width, proposedSize.width)); } /* Required by LayoutManager. */ /* This is called when the panel is first displayed, * and every time its size changes. * Note: You CAN'T assume preferredLayoutSize() or minimumLayoutSize() * will be called -- in the case of applets, at least, they probably * won't be. */ public void layoutContainer(Container target) { synchronized (this) { Insets insets = target.getInsets(); Dimension targetSize = target.getSize(); Dimension available = new Dimension (targetSize.width - (insets.left + insets.right), targetSize.height - (insets.top + insets.bottom)); setSizes(target); Dimension dleft = new Dimension(); Dimension dright = new Dimension(); Dimension dcenter = center.getMinimumSize(); int x = insets.top; int y = insets.left; int h = available.height; int w = 0; if (leftSize < 0) { Debug.show (Debug.splitters, "HSL.layoutContainer leftFraction ", leftFraction); w = (int)(leftFraction * (available.width - dcenter.width)); } else { Debug.show (Debug.splitters, "HSL.layoutContainer leftSize ", leftSize); w = leftSize; } left.setSize (w, h); left.getPreferredSize(); left.setBounds (x, y, w, h); Debug.show (Debug.splitters, "HSL.left x ", x); Debug.show (Debug.splitters, "HSL.left w ", w); x += w; center.setSize (dcenter.width, h); center.getPreferredSize(); center.setBounds (x, y, dcenter.width, h); x += dcenter.width; w = rightSize = available.width - x; right.setSize (w, h); right.getPreferredSize(); right.setBounds (x, y, w, h); Debug.show (Debug.splitters, "HSL.right x ", x); Debug.show (Debug.splitters, "HSL.right w ", w); } /* left.validate(); center.validate(); right.validate(); */ } public String toString() { return getClass().getName() + "[leftFraction=" + leftFraction + "]"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -