From 72f8c306b78ac950b30fb6530d3692c4f1746a02 Mon Sep 17 00:00:00 2001 From: "Yuan.Wang" <1536296691@qq.com> Date: Mon, 31 Aug 2020 16:36:01 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-36985=20=E4=BB=A3=E7=A0=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=20=E7=BB=84=E4=BB=B6=E6=A0=91=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=92=8C=E9=80=89=E6=8B=A9=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=97=B6=E8=AE=A9=E5=85=B6=E6=B5=AE=E4=BA=8E=E9=A1=B6=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/SelectionModel.java | 2 - .../fr/design/designer/creator/XButton.java | 15 ------- .../design/designer/creator/XChartEditor.java | 8 ++-- .../fr/design/designer/creator/XCreator.java | 33 ++++++++++++++-- .../design/designer/creator/XElementCase.java | 7 +--- .../fr/design/mainframe/ComponentTree.java | 39 ++++--------------- .../com/fr/design/mainframe/CoverPane.java | 1 - .../com/fr/design/mainframe/FormDesigner.java | 11 +++--- .../widget/topxcreator/BasicTopXCreator.java | 21 +++++----- .../widget/topxcreator/TopXCreator.java | 8 +++- .../widget/topxcreator/TopXCreators.java | 9 ++++- 11 files changed, 74 insertions(+), 80 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java index 49e0f94d29..42db0d8503 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java @@ -84,7 +84,6 @@ public class SelectionModel { selection.reset(); } else { //按下Ctrl或者shift键时鼠标可以进行多选,两次点击同一控件就取消选中 - //XCreator comp = designer.getComponentAt(e); XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); if (topLayout != null && !topLayout.isEditable()) { comp = topLayout; @@ -98,7 +97,6 @@ public class SelectionModel { comp = designer.getComponentAt(e); } // 获取e所在的组件 - //XCreator comp = designer.getComponentAt(e); selectACreator(comp); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java b/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java index 5f5bb73b22..d4e9758316 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XButton.java @@ -309,19 +309,4 @@ public class XButton extends XWidgetCreator { } } - -/* @Override - public BasicTopCreator getTopXCreator(){ - return new BasicTopXCreator(this) { - @Override - protected void initEditor() { - XButton(XButton.this.toData(),this.getSize() - - } - } - - //return new XButton((Button)this.toData(),this.getSize()); - - }*/ - } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java index 0ca125e930..f846f29bd2 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XChartEditor.java @@ -366,20 +366,20 @@ public class XChartEditor extends XBorderStyleWidgetCreator { return new TopXChart(this); } - private class TopXChart extends TopXCreator{ + private class TopXChart extends TopXCreator { private final DesignerEditor designerEditor; public TopXChart(XCreator creator) { super(creator); designerEditor = creator.getDesignerEditor(); - Rectangle bounds=getBounds(); + Rectangle bounds = getBounds(); designerEditor.getEditorTarget().setBounds(bounds.x + 1, bounds.y + 1, bounds.width - 2, bounds.height - 2); } /** * 更新designerEditor的大小 - * */ - protected void resetSize(Rectangle bounds){ + */ + protected void resetSize(Rectangle bounds) { super.resetSize(bounds); designerEditor.getEditorTarget().setBounds(bounds.x + 1, bounds.y + 1, bounds.width - 2, bounds.height - 2); } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index 0496d74787..82e7da5b2d 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -25,12 +25,12 @@ import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.stable.Constants; +import com.fr.stable.CoreGraphHelper; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; +import com.fr.third.javax.annotation.Nullable; -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.JPanel; +import javax.swing.*; import javax.swing.border.Border; import java.awt.BorderLayout; import java.awt.Color; @@ -39,6 +39,7 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; import java.beans.IntrospectionException; import java.util.ArrayList; import java.util.List; @@ -540,6 +541,8 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo selectionModel.selectACreatorAtMouseEvent(e); } + editingMouseListener.refreshTopXCreator(); + if (editingMouseListener.stopEditing() && this != designer.getRootComponent()) { ComponentAdapter adapter = AdapterBus.getComponentAdapter(designer, this); editingMouseListener.startEditing(this, adapter.getDesignerEditor(), adapter); @@ -807,8 +810,30 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo /** * 获得该组件的顶层显示组件 */ + @Nullable public BasicTopXCreator getTopXCreator() { - return null; + return new BasicTopXCreator(this){ + @Override + protected void addComponent() { + BufferedImage image=getImage(); + Icon icon = new ImageIcon(image); + JLabel jLabel = new JLabel(icon,JLabel.CENTER); + jLabel.setSize(getSize()); + this.add(jLabel); + } + }; + } + + /** + * 获得组件的图像 + * */ + public BufferedImage getImage() { + BufferedImage image = CoreGraphHelper.createBufferedImage(getWidth(), getHeight()); + Graphics g = image.createGraphics(); + this.paint(g); + return image; } + + } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java index a9fd877168..d84fd2e0cd 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XElementCase.java @@ -384,11 +384,8 @@ public class XElementCase extends XBorderStyleWidgetCreator implements FormEleme public TopXElementCase(XCreator creator) { super(creator); - if (creator instanceof XElementCase) { - XElementCase elementCase = (XElementCase) creator; - imageLabel = elementCase.initImageBackground(); - add(imageLabel); - } + imageLabel = initImageBackground(); + add(imageLabel); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/ComponentTree.java b/designer-form/src/main/java/com/fr/design/mainframe/ComponentTree.java index cbf6852558..2fdd1f8f1e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/ComponentTree.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/ComponentTree.java @@ -236,12 +236,9 @@ public class ComponentTree extends JTree { repaint(); } - public void expandTree() { - TreePath[] paths = getSelectedTreePath(); - if (paths.length > 0) { - expandPath(getSelectedTreePath()[0]); - } - } + /** + * 获得树的展开路径 + * */ public void getExpandNodes(List searchList) { getExpandNodes((XLayoutContainer)designer.getTopContainer(),searchList); } @@ -256,6 +253,10 @@ public class ComponentTree extends JTree { } } } + + /** + * 将树按照展开路径进行展开 + * */ public void expandNodes(List list){ for(TreePath treePath:list) { if (treePath.getLastPathComponent() instanceof XLayoutContainer) { @@ -267,32 +268,6 @@ public class ComponentTree extends JTree { } } } -/* private void expandNode(JTree myTree, DefaultMutableTreeNode currNode, List list){ - if(currNode.getParent()==null){ - list.remove(0); - } - if(list.size()<=0) return; - - int childCount = currNode.getChildCount(); - String strNode = vNode.elementAt(0).toString(); - DefaultMutableTreeNode child = null; - boolean flag=false; - for(int i=0; i0){ - expandNode(myTree,child, vNode); - }else{ - myTree.expandPath(new TreePath(child.getPath())); - } - } - }*/ private TreePath buildTreePath(Component comp) { ArrayList path = new ArrayList(); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java b/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java index 5aa4f93ad5..a4c4014408 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/CoverPane.java @@ -94,7 +94,6 @@ public class CoverPane extends JComponent { int preferWidth = editButton.getPreferredSize().width; int preferHeight = editButton.getPreferredSize().height; editButton.setBounds((width - preferWidth) / 2, (height - preferHeight) / 2, preferWidth, preferHeight); - System.out.println(width+"---"+height); } @Override diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java index 191425df22..5cb0157f9e 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java @@ -846,12 +846,13 @@ public class FormDesigner extends TargetComponent
implements TreeSelection y -= creator.getY(); Rectangle rect = ComponentUtils.computeVisibleRect(creator); // 判断是否处于交叉区域 - if (isIntersectArea(x, y, rect)) { - if (creator instanceof XWTitleLayout) { - return creator.getEditingChildCreator(); - } - return creator; + if (!isIntersectArea(x, y, rect)) { + continue; + } + if (creator instanceof XWTitleLayout) { + return creator.getEditingChildCreator(); } + return creator; } return null; } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/BasicTopXCreator.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/BasicTopXCreator.java index 1b248a9d1b..d70b07abb7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/BasicTopXCreator.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/BasicTopXCreator.java @@ -5,10 +5,12 @@ import com.fr.design.mainframe.CoverReportPane; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.design.utils.ComponentUtils; +import com.fr.stable.CoreGraphHelper; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; /** * @Author: Yuan.Wang @@ -18,8 +20,6 @@ public class BasicTopXCreator extends JComponent { private FormDesigner designer; private XCreator creator; - private JComponent editor; - public BasicTopXCreator(XCreator creator) { this.designer = WidgetPropertyPane.getInstance().getEditingFormDesigner(); this.creator = creator; @@ -30,11 +30,8 @@ public class BasicTopXCreator extends JComponent { setOpaque(false); setBackground(null); setLayout(null); - setBounds(calculateBounds(creator)); - initEditor(); - if(editor!=null) { - add(editor); - } + setBounds(calculateBounds()); + addComponent(); } @@ -43,7 +40,7 @@ public class BasicTopXCreator extends JComponent { //do nothing } - protected void initEditor() { + protected void addComponent() { } @@ -51,7 +48,7 @@ public class BasicTopXCreator extends JComponent { * 重新设置组件大小 * */ public void resizeTopXCreator() { - Rectangle bounds=calculateBounds(creator); + Rectangle bounds=calculateBounds(); setBounds(bounds); resetSize(bounds); } @@ -61,7 +58,7 @@ public class BasicTopXCreator extends JComponent { /** * 计算显示大小 * */ - private Rectangle calculateBounds(XCreator xCreator) { + private Rectangle calculateBounds() { Rectangle rect = ComponentUtils.getRelativeBounds(creator); Rectangle bounds = new Rectangle(0, 0, creator.getWidth(), creator.getHeight()); bounds.x += (rect.x - designer.getHorizontalScaleValue()); @@ -69,4 +66,8 @@ public class BasicTopXCreator extends JComponent { return bounds; } + @Override + public void paint(Graphics g) { + super.paint(g); + } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreator.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreator.java index 6218fe83f7..6ad9e1843d 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreator.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreator.java @@ -34,10 +34,16 @@ public class TopXCreator extends BasicTopXCreator { coverPanel.setSize(getSize()); } - public void setCoverPaneVisible(boolean visible) { + /** + * 设置是否显示蒙层 + * */ + public void displayCoverPane(boolean visible) { coverPanel.setVisible(visible); } + /** + * 依据鼠标事件和visible设置是否显示蒙层 + * */ public void displayCoverPane(MouseEvent event, boolean visible) { if (!visible) { setVisible(false); diff --git a/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreators.java b/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreators.java index 2f8ae3b406..417ec80e80 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreators.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/widget/topxcreator/TopXCreators.java @@ -1,5 +1,7 @@ package com.fr.design.mainframe.widget.topxcreator; +import com.fr.design.designer.beans.events.DesignerEditListener; +import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.creator.XCreator; import com.fr.design.mainframe.FormDesigner; @@ -29,6 +31,11 @@ public class TopXCreators extends JComponent { setVisible(false); setBackground(null); setOpaque(false); + designer.addDesignerEditListener(e -> { + if (e.getCreatorEventID() == DesignerEvent.CREATOR_EDITED) { + refresh(); + } + }); } /** @@ -52,7 +59,7 @@ public class TopXCreators extends JComponent { for (int i = 0, count = getComponentCount(); i < count; i++) { if (getComponent(i) instanceof TopXCreator) { TopXCreator xCreator = (TopXCreator) getComponent(i); - xCreator.setCoverPaneVisible(aFlag); + xCreator.displayCoverPane(aFlag); } } repaint();