Browse Source

Pull request #5094: REPORT-55491 【交互验收】【组件背景分离】在组件属性下的「主体背景」设置,在配置界面不生效,看不到效果

Merge in DESIGN/design from ~STARRYI/design:mergeTorelease/11.0 to release/11.0

* commit '7f406e7c2749ab9b42415f7b1151341ae59176b4':
  REPORT-55491 【交互验收】【组件背景分离】在组件属性下的「主体背景」设置,在配置界面不生效,看不到效果
persist/11.0
ju|剧浩宇 3 years ago
parent
commit
1797b795f6
  1. 8
      designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java
  2. 29
      designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java
  3. 11
      designer-realize/src/main/java/com/fr/grid/Grid.java
  4. 2
      designer-realize/src/main/java/com/fr/grid/GridUI.java

8
designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java

@ -41,7 +41,7 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
static { static {
try { try {
DEFAULT_BACKGROUND = BaseUtils.readImageWithCache("com/fr/base/images/report/elementcase.png"); DEFAULT_BACKGROUND = BaseUtils.readImageWithCache("com/fr/base/images/report/elementcase_translucent.png");
} catch (Throwable e) { } catch (Throwable e) {
//IBM jdk 1.5.0_22 并发下读取图片有时会异常(EOFException), 这个图片反正只有设计器用到, 捕获住 //IBM jdk 1.5.0_22 并发下读取图片有时会异常(EOFException), 这个图片反正只有设计器用到, 捕获住
DEFAULT_BACKGROUND = CoreGraphHelper.createBufferedImage(0, 0); DEFAULT_BACKGROUND = CoreGraphHelper.createBufferedImage(0, 0);
@ -183,7 +183,8 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
if (editor == null) { if (editor == null) {
setBorder(DEFALUTBORDER); setBorder(DEFALUTBORDER);
editor = new JPanel(); editor = new JPanel();
editor.setBackground(null); editor.setOpaque(false);
editor.setBackground(new Color(0, 0, 0, 0));
editor.setLayout(null); editor.setLayout(null);
imageLable = initImageBackground(); imageLable = initImageBackground();
@ -218,7 +219,8 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme
private void setLabelBackground(Image image, UILabel imageLable) { private void setLabelBackground(Image image, UILabel imageLable) {
ImageIcon icon = new ImageIcon(image); ImageIcon icon = new ImageIcon(image);
imageLable.setIcon(icon); imageLable.setIcon(icon);
imageLable.setOpaque(true); imageLable.setOpaque(false);
imageLable.setBackground(new Color(0, 0, 0, 0));
imageLable.setLayout(null); imageLable.setLayout(null);
imageLable.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight()); imageLable.setBounds(0, 0, icon.getIconWidth(), icon.getIconHeight());
} }

29
designer-realize/src/main/java/com/fr/design/mainframe/form/FormElementCaseDesigner.java

@ -44,9 +44,9 @@ import javax.swing.JComponent;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollBar; import javax.swing.JScrollBar;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Graphics; import java.awt.Graphics2D;
import java.awt.Transparency;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
/** /**
@ -130,22 +130,23 @@ public class FormElementCaseDesigner
public BufferedImage getElementCaseImage(Dimension size) { public BufferedImage getElementCaseImage(Dimension size) {
BufferedImage image = null; BufferedImage image = null;
try { try {
image = new java.awt.image.BufferedImage(size.width, size.height, int width = size.width;
java.awt.image.BufferedImage.TYPE_INT_RGB); int height = size.height;
Graphics g = image.getGraphics();
//填充白色背景, 不然有黑框 image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Color oldColor = g.getColor(); Graphics2D g2d = image.createGraphics();
g.setColor(Color.WHITE); // 创建一个支持透明背景的buffer image
g.fillRect(0, 0, size.width, size.height); image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g.setColor(oldColor); g2d.dispose();
if (DesignerUIModeConfig.getInstance().newUIMode()) { g2d = image.createGraphics();
g.translate(-elementCasePane.getGridCorner().getWidth(), -elementCasePane.getGridCorner().getHeight());
}
Grid grid = this.elementCasePane != null ? this.elementCasePane.getGrid() : null; Grid grid = this.elementCasePane != null ? this.elementCasePane.getGrid() : null;
if (grid != null) { if (grid != null) {
grid.paintAll(g); boolean oldTranslucent = grid.isTranslucent();
// 截缩图图时grid需支持半透明,不能用默认白色填充画布,否则会遮挡组件样式背景
grid.setTranslucent(true);
grid.paint(g2d);
grid.setTranslucent(oldTranslucent);
} }
} catch (Exception e) { } catch (Exception e) {

11
designer-realize/src/main/java/com/fr/grid/Grid.java

@ -134,6 +134,9 @@ public class Grid extends BaseGridComponent {
private boolean needRequestFocus = true; private boolean needRequestFocus = true;
// 截取缩略图时需透明(不能用默认白色填充),否则会遮挡组件样式的背景,其余情况的绘制可以用白色等默认颜色填充
private boolean isTranslucent = false;
public Grid(int resolution) { public Grid(int resolution) {
this.resolution = resolution; this.resolution = resolution;
// 能触发processEvent,不管是否给component增加listener // 能触发processEvent,不管是否给component增加listener
@ -1458,4 +1461,12 @@ public class Grid extends BaseGridComponent {
this.paginateLineShowType = paginateLineShowType; this.paginateLineShowType = paginateLineShowType;
this.getElementCasePane().repaint(); this.getElementCasePane().repaint();
} }
public boolean isTranslucent() {
return isTranslucent;
}
public void setTranslucent(boolean translucent) {
isTranslucent = translucent;
}
} }

2
designer-realize/src/main/java/com/fr/grid/GridUI.java

@ -1128,8 +1128,10 @@ public class GridUI extends ComponentUI {
double realWidth = gridSize.getWidth();// 宽度 double realWidth = gridSize.getWidth();// 宽度
double realHeight = gridSize.getHeight();// 高度 double realHeight = gridSize.getHeight();// 高度
if (!grid.isTranslucent()) {
// 画背景 // 画背景
this.paintBackground(g2d, grid, elementCase, resolution); this.paintBackground(g2d, grid, elementCase, resolution);
}
// 画Grid Line // 画Grid Line
this.paintGridLine(g2d, grid, elementCase, realWidth, realHeight, resolution); this.paintGridLine(g2d, grid, elementCase, realWidth, realHeight, resolution);

Loading…
Cancel
Save