帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

112 lines
3.7 KiB

package com.fr.poly;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.LayoutManager;
import com.fr.general.ComparatorUtils;
public class PolyDesignerLayout implements LayoutManager, java.io.Serializable {
public static final String Center = "Center";
public static final String Vertical = "Vertical";
public static final String HRuler = "HRuler";
public static final String VRuler = "VRuler";
private Component designer;
private Component verScrollBar;
private Component hRuler;
private Component vRuler;
public PolyDesignerLayout() {
}
@Override
public void addLayoutComponent(String name, Component comp) {
if (Center.equals(name)) {
designer = comp;
} else if (Vertical.equals(name)) {
verScrollBar = comp;
} else if (HRuler.equals(name)) {
hRuler = comp;
} else if (VRuler.equals(name)) {
vRuler = comp;
}
}
@Override
public void removeLayoutComponent(Component comp) {
if (ComparatorUtils.equals(comp, designer)) {
designer = null;
} else if (ComparatorUtils.equals(comp, verScrollBar)) {
verScrollBar = null;
} else if (ComparatorUtils.equals(comp, hRuler)) {
hRuler = null;
} else if (ComparatorUtils.equals(comp, vRuler)) {
vRuler = null;
}
}
@Override
public Dimension preferredLayoutSize(Container target) {
synchronized (target.getTreeLock()) {
Dimension dim = new Dimension();
Dimension dim0 = designer.getPreferredSize();
dim.width += dim0.width;
dim.height += dim0.height;
Dimension dim2 = verScrollBar.getPreferredSize();
dim.width += dim2.width;
Insets insets = target.getInsets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;
return dim;
}
}
@Override
public Dimension minimumLayoutSize(Container target) {
synchronized (target.getTreeLock()) {
Dimension dim = new Dimension();
Dimension dim0 = designer.getMinimumSize();
dim.width += dim0.width;
dim.height += dim0.height;
Dimension dim2 = verScrollBar.getMinimumSize();
dim.width += dim2.width;
Insets insets = target.getInsets();
dim.width += insets.left + insets.right;
dim.height += insets.top + insets.bottom;
return dim;
}
}
@Override
public void layoutContainer(Container target) {
synchronized (target.getTreeLock()) {
Insets insets = target.getInsets();
int top = insets.top;
int bottom = target.getHeight() - insets.bottom;
int left = insets.left;
int right = target.getWidth() - insets.right;
Dimension hRulerPreferredSize = hRuler == null ? new Dimension() :hRuler.getPreferredSize();
Dimension vRulerPreferredSize = vRuler == null ? new Dimension() :vRuler.getPreferredSize();
// Dimension hbarPreferredSize = horScrollBar.getPreferredSize();
Dimension vbarPreferredSize = verScrollBar.getPreferredSize();
if(hRuler != null) {
hRuler.setBounds(left + vRulerPreferredSize.width -1, top, right - vRulerPreferredSize.width, hRulerPreferredSize.height);
}
if(vRuler != null) {
vRuler.setBounds(left, top + vRulerPreferredSize.height -1, vRulerPreferredSize.width, bottom - hRulerPreferredSize.height);
}
// horScrollBar.setBounds(left + vRulerPreferredSize.height, bottom - hbarPreferredSize.height, right - vRulerPreferredSize.height - 16, hbarPreferredSize.height);
verScrollBar.setBounds(right - vRulerPreferredSize.width, top + vRulerPreferredSize.height, vbarPreferredSize.width, bottom - hRulerPreferredSize.height - 16);
designer.setBounds(
left + vRulerPreferredSize.width,
top + vRulerPreferredSize.height,
right - vbarPreferredSize.width - vRulerPreferredSize.width,
bottom );
}
}
}