Browse Source

REPORT-60717 【主题切换】设置组件内边距后边框线显示有问题

【问题原因】
报表块/图表块内边距优化后,标题和body的分界线左右两侧
也出现了边距,分界线需要向外扩展

【改动思路】
同上
bugfix/11.0
Starryi 3 years ago
parent
commit
cfca5143a5
  1. 57
      designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java
  2. 33
      designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java
  3. 33
      designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java

57
designer-base/src/main/java/com/fr/design/mainframe/theme/preview/ComponentPreviewPane.java

@ -90,6 +90,37 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th
}
@Override
protected void paintBorder(Graphics g) {
super.paintBorder(g);
paintSeparator((Graphics2D) g);
}
private void paintSeparator(Graphics2D g2d) {
Border border = getBorder();
if (border instanceof LineBorder && titlePane != null) {
Border containerBorder = container.getBorder();
Insets insets = containerBorder.getBorderInsets(container);
int y = titlePane.getHeight() + insets.top;
Color oldColor = g2d.getColor();
Stroke oldStroke = g2d.getStroke();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Color lineColor = ((LineBorder) border).getLineColor();
int thickness = ((LineBorder) border).getThickness();
g2d.setColor(lineColor);
g2d.setStroke(new BasicStroke(thickness * 2));
g2d.drawLine(0, y, getWidth(), y);
g2d.setStroke(oldStroke);
g2d.setColor(oldColor);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
}
}
@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
@ -144,7 +175,6 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th
data.setInsetImagePadding(titlePacker.getInsetImagePadding());
data.setInsetRelativeTextLeft(titlePacker.isInsetRelativeTextLeft());
data.setInsetRelativeTextRight(titlePacker.isInsetRelativeTextRight());
this.setBorder(new BottomLineBorder(componentStyle.getStyle().getColor(), componentStyle.getStyle().getBorder()));
}
public Label getData(){
@ -172,31 +202,6 @@ public abstract class ComponentPreviewPane extends UINoOpaquePanel implements Th
}
public static class BottomLineBorder extends LineBorder {
private BottomLineBorder(Color color, int thickness) {
super(color, thickness);
}
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2d = (Graphics2D) g;
Color oldColor = g2d.getColor();
Stroke oldStroke = g2d.getStroke();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(getLineColor());
g2d.setStroke(new BasicStroke(getThickness() * 2));
g2d.drawLine(0, height, width, height);
g2d.setStroke(oldStroke);
g2d.setColor(oldColor);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
}
}
private static class Utils {
private static void paintBackground(Graphics2D g2d, Background background, Shape shape, float opacity) {

33
designer-form/src/main/java/com/fr/design/designer/creator/XBorderStyleWidgetCreator.java

@ -273,12 +273,7 @@ public class XBorderStyleWidgetCreator extends XWidgetCreator{
parentCreator.setBorder(border); // 容器绘制完整边框
bodyCreator.setBorder(BorderFactory.createEmptyBorder()); // body不绘制边框
titleCreator.setBorder(BorderFactory.createEmptyBorder()); // title绘制底部边框
if (border instanceof LineBorder) {
Color color = ((LineBorder) border).getLineColor();
int thickness = ((LineBorder) border).getThickness();
titleCreator.setBorder(new BottomLineBorder(color, thickness));
}
titleCreator.setBorder(BorderFactory.createEmptyBorder()); // title不绘制边框
if (bodyCreator instanceof XBorderStyleWidgetCreator) {
XBorderStyleWidgetCreator styledBodyXCreator = (XBorderStyleWidgetCreator) bodyCreator;
@ -407,32 +402,6 @@ public class XBorderStyleWidgetCreator extends XWidgetCreator{
}
// 适用于标题栏的底部边框
public static class BottomLineBorder extends LineBorder {
private BottomLineBorder(Color color, int thickness) {
super(color, thickness);
}
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2d = (Graphics2D)g;
Color oldColor = g2d.getColor();
Stroke oldStroke = g2d.getStroke();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(getLineColor());
g2d.setStroke(new BasicStroke(getThickness() * 2));
g2d.drawLine(0, height, width, height);
g2d.setStroke(oldStroke);
g2d.setColor(oldColor);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
}
}
public static class NoBackgroundPaneUI extends BasicPanelUI {
@Override
public void update(Graphics g, JComponent c) {

33
designer-form/src/main/java/com/fr/design/designer/creator/XWTitleLayout.java

@ -15,6 +15,8 @@ import com.fr.form.ui.container.WTitleLayout;
import com.fr.general.Background;
import com.fr.general.ComparatorUtils;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import java.awt.*;
import java.awt.event.ContainerEvent;
import java.awt.geom.Rectangle2D;
@ -187,6 +189,37 @@ public class XWTitleLayout extends DedicateLayoutContainer {
}
@Override
protected void paintBorder(Graphics g) {
super.paintBorder(g);
paintSeparator((Graphics2D) g);
}
private void paintSeparator(Graphics2D g2d) {
Border border = getBorder();
XCreator titleCreator = getTitleCreator();
if (border instanceof LineBorder && titleCreator != null) {
int height = titleCreator.getHeight();
Insets paddingInsets = getInsets();
int y = height + paddingInsets.top;
Color oldColor = g2d.getColor();
Stroke oldStroke = g2d.getStroke();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Color lineColor = ((LineBorder) border).getLineColor();
int thickness = ((LineBorder) border).getThickness();
g2d.setColor(lineColor);
g2d.setStroke(new BasicStroke(thickness * 2));
g2d.drawLine(0, y, getWidth(), y);
g2d.setStroke(oldStroke);
g2d.setColor(oldColor);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
}
}
@Override
public void paintBackground(Graphics2D g2d) {
if (getComponentCount() > 1) {

Loading…
Cancel
Save