From c8bb1cae57ff091420df8dd45643682b1b6dfa2c Mon Sep 17 00:00:00 2001 From: obo Date: Tue, 4 Apr 2023 13:50:05 +0800 Subject: [PATCH 01/13] =?UTF-8?q?REPORT-92161=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E5=9B=BE=E6=A0=87-=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E7=9B=B8=E5=85=B3-=E9=83=A8=E5=88=86=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E6=97=A0=E5=8F=8D=E8=89=B2=E5=A4=84=E7=90=86=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=90=8E=E5=B0=B1=E7=9C=8B=E4=B8=8D=E5=88=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/controlpane/JListControlPane.java | 9 ++- .../com/fr/design/utils/IconColorUtils.java | 66 +++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java index ee05422ca..7a1fcd9a4 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java @@ -7,6 +7,7 @@ import com.fr.design.gui.ilist.JNameEdList; import com.fr.design.gui.ilist.ListModelElement; import com.fr.design.gui.ilist.ModNameActionListener; import com.fr.design.i18n.Toolkit; +import com.fr.design.utils.IconColorUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.event.Listener; import com.fr.general.ComparatorUtils; @@ -19,6 +20,7 @@ import com.fr.stable.core.PropertyChangeAdapter; import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListModel; +import javax.swing.Icon; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JPopupMenu; @@ -27,6 +29,7 @@ import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -357,7 +360,11 @@ public abstract class JListControlPane extends JControlPane implements ListContr boolean iconSet = false; for (NameableCreator creator : JListControlPane.this.creators()) { if (creator.menuIcon() != null && creator.acceptObject2Populate(nameable) != null) { - this.setIcon(creator.menuIcon()); + Icon icon = creator.menuIcon(); + if(isSelected) { + icon = IconColorUtils.convert(icon, Color.WHITE); + } + this.setIcon(icon); this.setToolTipText(creator.createTooltip()); iconSet = true; break; diff --git a/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java b/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java new file mode 100644 index 000000000..d8db0a6e1 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java @@ -0,0 +1,66 @@ +package com.fr.design.utils; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.image.BufferedImage; + + +/** + * 对Icon进行颜色处理的工具类 + * + * @author obo + * @since 11.0 + * Created on 2023/4/3 + */ +public final class IconColorUtils { + + /** + * 转色处理并返回处理后的Icon + * + * @param icon 需要转色处理的icon + * @param color 需要转的颜色,可能要和视觉沟通 + * @return 转色后的icon + */ + public static Icon convert(Icon icon, Color color) { + BufferedImage image = iconToImage(icon); + Image convertedImage = createConvertedImage(image, color); + return new ImageIcon(convertedImage); + } + + /** + * 获取icon中的image对象,虽然设计器中未来大部分图标会读取为SVGIcon类型,其中直接包含image对象 + * 但存在某些特殊情况,例如绘制带警告图标的数据集时,无法直接获取image对象,因此统一使用此方法获取 + * + * @param icon 需要获取image的icon + * @return 获取icon对应的image + */ + private static BufferedImage iconToImage(Icon icon) { + BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); + Graphics2D g2d = image.createGraphics(); + icon.paintIcon(null, g2d, 0, 0); + g2d.dispose(); + return image; + } + + /** + * 转色 + * + * @param image 需要转色的image + * @return 转色后的image + */ + private static Image createConvertedImage(BufferedImage image, Color color) { + int colorRgb = (color.getRGB() & 0x00FFFFFF); + for (int x = 0; x < image.getWidth(); x++) { + for (int y = 0; y < image.getHeight(); y++) { + int originalArgb = image.getRGB(x, y); + int alpha = (originalArgb >> 24) & 0xFF; + int newArgb = (alpha << 24) | colorRgb; + image.setRGB(x, y, newArgb); + } + } + return image; + } +} \ No newline at end of file From 9d81b6496df6dd2c92ad07182c6f74da7a9c4604 Mon Sep 17 00:00:00 2001 From: obo Date: Tue, 4 Apr 2023 13:51:07 +0800 Subject: [PATCH 02/13] =?UTF-8?q?REPORT-92161=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E5=9B=BE=E6=A0=87-=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E7=9B=B8=E5=85=B3-=E9=83=A8=E5=88=86=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E6=97=A0=E5=8F=8D=E8=89=B2=E5=A4=84=E7=90=86=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=90=8E=E5=B0=B1=E7=9C=8B=E4=B8=8D=E5=88=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/utils/IconColorUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java b/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java index d8db0a6e1..b4b0db9a5 100644 --- a/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java @@ -49,6 +49,7 @@ public final class IconColorUtils { * 转色 * * @param image 需要转色的image + * @param color 需要转的颜色,可能要和视觉沟通 * @return 转色后的image */ private static Image createConvertedImage(BufferedImage image, Color color) { From cf4830a241dccc3223a5d5c67a8b412b00178964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 14:43:03 +0800 Subject: [PATCH 03/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/utils/TemplateUtils.java | 118 ++++++++++-------- .../worker/save/SaveFailureHandler.java | 8 +- 2 files changed, 72 insertions(+), 54 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index f3d062946..a09e9c559 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -24,6 +24,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.SwingWorker; import java.io.OutputStream; import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -44,7 +46,7 @@ public class TemplateUtils { * @param openNewTemplate 是否需要在创建后打开模板 */ public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate) { - createAndOpenTemplate(prefix, file, createByEditingTemplate, openNewTemplate, () -> {}); + createAndOpenTemplate(prefix, file, createByEditingTemplate, openNewTemplate, null); } /** @@ -66,15 +68,33 @@ public class TemplateUtils { Runnable doAfterCreateTemplate; //判断一下要保存的文件是否已打开 int index = HistoryTemplateListCache.getInstance().contains(file); - if (index == -1) { - doAfterCreateTemplate = () -> {}; - } else { - JTemplate template = HistoryTemplateListCache.getInstance().getHistoryList().get(index); - doAfterCreateTemplate = () -> HistoryTemplateListCache.getInstance().closeSelectedReport(template); + JTemplate template = null; + if (index != -1) { + template = HistoryTemplateListCache.getInstance().getHistoryList().get(index); } - createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, doAfterCreateTemplate); + createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, template); } + /** + * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate + * + * @param prefix 模板文件名称前缀 + * @param file 模板文件 + * @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板 + * 为true时以CurrentEditingTemplate为准创建新模板 + * 为false时以传入的File文件为准创建新模板,此文件可以不是编辑状态 + * @param openNewTemplate 是否需要在创建后打开模板 + * @param template 备份成功后需要关闭的模板 + */ + public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { + String oldPath = file.getPath(); + file = getSavedFile(prefix, file); + if (file == null) { + return; + } + + createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, template); + } /** * 返回值可以为null, 为null表示没有点击保存按钮或者传递进来的文件file本身不满足格式要求 @@ -110,32 +130,10 @@ public class TemplateUtils { return null; } - /** - * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate - * - * @param prefix 模板文件名称前缀 - * @param file 模板文件 - * @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板 - * 为true时以CurrentEditingTemplate为准创建新模板 - * 为false时以传入的File文件为准创建新模板,此文件可以不是编辑状态 - * @param openNewTemplate 是否需要在创建后打开模板 - * @param doAfterCreateTemplate 创建备份模板成功后调用 - */ - public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate, Runnable doAfterCreateTemplate) { - String oldPath = file.getPath(); - file = getSavedFile(prefix, file); - if (file == null) { - return; - } - - createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, doAfterCreateTemplate); - } - - private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, Runnable doAfterCreateTemplate) { - new SwingWorker() { + private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { - @Override - protected Boolean doInBackground() throws Exception { + CompletableFuture.supplyAsync(() -> { + try { // 读取模板数据 byte[] content = getTemplateData(createByEditingTemplate, oldPath); OutputStream out = null; @@ -144,7 +142,7 @@ public class TemplateUtils { boolean saveAsLock = WorkContext.getCurrent().get(TplOperator.class).saveAs(file.getPath()); if (!saveAsLock) { // 加锁失败时,直接返回 - return false; + throw new RuntimeException("[RemoteDesign] back up template file failed"); } out = file.asOutputStream(); out.write(content); @@ -159,27 +157,47 @@ public class TemplateUtils { } } return true; + } catch (Exception e) { + SaveFailureHandler.getInstance().process(e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; } - - @Override - protected void done() { - try { - if (!get()) { - throw new Exception("[RemoteDesign] back up template file failed"); + }).thenApply((Function) aBoolean -> { + if (!aBoolean) { + //备份失败直接返回 + return null; + } + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + if (JTemplate.isValid(template)) { + //给要关闭的模板解锁 + WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(template.getPath()); + return true; } - // 创建备份成功后,关闭原模板 - doAfterCreateTemplate.run(); - if (openNewTemplate) { - DesignerContext.getDesignerFrame().openTemplate(file); + return false; + } + + @Override + protected void done() { + try { + if (get()) { + // 创建备份成功后,关闭原模板 + HistoryTemplateListCache.getInstance().closeSelectedReport(template); + } + if (openNewTemplate) { + DesignerContext.getDesignerFrame().openTemplate(file); + } + // 备份成功刷新下目录树 展示出来备份的模板 + TemplateTreePane.getInstance().refresh(); + } catch (Exception e) { + SaveFailureHandler.getInstance().process(e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } - // 备份成功刷新下目录树 展示出来备份的模板 - TemplateTreePane.getInstance().refresh(); - } catch (Exception e) { - SaveFailureHandler.getInstance().process(e); - FineLoggerFactory.getLogger().error(e.getMessage(), e); } - } - }.execute(); + }.execute(); + return null; + }); } /** diff --git a/designer-base/src/main/java/com/fr/design/worker/save/SaveFailureHandler.java b/designer-base/src/main/java/com/fr/design/worker/save/SaveFailureHandler.java index 42ef95978..9ab897d7e 100644 --- a/designer-base/src/main/java/com/fr/design/worker/save/SaveFailureHandler.java +++ b/designer-base/src/main/java/com/fr/design/worker/save/SaveFailureHandler.java @@ -119,8 +119,8 @@ public class SaveFailureHandler implements ThrowableHandler { new FileNodeFILE(new FileNode(template.getPath(), false)), true, true, - // 创建并打开备份模板后,关闭原模板,无需释放原模板锁(因为已经被超管手动清除了) - () -> HistoryTemplateListCache.getInstance().closeSelectedReport(template)); + //另存之后需要关闭的模板 + template); } } } @@ -141,8 +141,8 @@ public class SaveFailureHandler implements ThrowableHandler { new FileNodeFILE(new FileNode(template.getPath(), false)), true, true, - // 创建并打开备份模板后,关闭原模板,无需释放原模板锁(锁定信息不一致 = 此用户模板锁信息已被清除) - () -> HistoryTemplateListCache.getInstance().closeSelectedReport(template)); + //另存之后需要关闭的模板 + template); } } } From b7f78769328cf4c249e8cfbdf7dc701aade959f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 14:51:26 +0800 Subject: [PATCH 04/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0--=E6=96=B9=E6=B3=95=E6=8B=86=E4=B8=A4?= =?UTF-8?q?=E5=8D=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/utils/TemplateUtils.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index a09e9c559..11b98883e 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -132,7 +132,7 @@ public class TemplateUtils { private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { - CompletableFuture.supplyAsync(() -> { + CompletableFuture createTemplate = CompletableFuture.supplyAsync(() -> { try { // 读取模板数据 byte[] content = getTemplateData(createByEditingTemplate, oldPath); @@ -162,7 +162,9 @@ public class TemplateUtils { FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; } - }).thenApply((Function) aBoolean -> { + }); + + createTemplate.thenApply((Function) aBoolean -> { if (!aBoolean) { //备份失败直接返回 return null; From 92c88eef13efdc9bd63a3256562f9cdccb95121f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 15:01:35 +0800 Subject: [PATCH 05/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0--=E6=96=B9=E6=B3=95=E6=8B=86=E4=B8=A4?= =?UTF-8?q?=E5=8D=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/utils/TemplateUtils.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index 11b98883e..77c9d2eb8 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -130,9 +130,17 @@ public class TemplateUtils { return null; } - private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { - - CompletableFuture createTemplate = CompletableFuture.supplyAsync(() -> { + /** + * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate + * + * @param file saveAs的模板文件 + * @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板 + * 为true时以CurrentEditingTemplate为准创建新模板 + * 为false时以传入的File文件为准创建新模板,此文件可以不是编辑状态 + * @param oldPath 被saveAs的文件路径 + */ + private static CompletableFuture createTemplate(FILE file, String oldPath, boolean createByEditingTemplate) { + return CompletableFuture.supplyAsync(() -> { try { // 读取模板数据 byte[] content = getTemplateData(createByEditingTemplate, oldPath); @@ -163,8 +171,10 @@ public class TemplateUtils { return false; } }); + } - createTemplate.thenApply((Function) aBoolean -> { + private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { + createTemplate(file, oldPath, createByEditingTemplate).thenApply((Function) aBoolean -> { if (!aBoolean) { //备份失败直接返回 return null; From a042152f1bf8655c4468fbe0479f9686cc6e3dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 15:29:32 +0800 Subject: [PATCH 06/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0--=E6=96=B9=E6=B3=95=E6=8B=86=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/utils/TemplateUtils.java | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index 77c9d2eb8..0cbbc4002 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -173,41 +173,48 @@ public class TemplateUtils { }); } - private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { - createTemplate(file, oldPath, createByEditingTemplate).thenApply((Function) aBoolean -> { - if (!aBoolean) { - //备份失败直接返回 - return null; + /** + * + * @param file 模板文件 + * @param openNewTemplate 是否需要打开新模板 + * @param template 需要关闭的模板 + */ + private static void openNewTemplate(FILE file, boolean openNewTemplate, @Nullable JTemplate template) { + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + if (JTemplate.isValid(template)) { + //给要关闭的模板解锁 + WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(template.getPath()); + return true; + } + return false; } - new SwingWorker() { - @Override - protected Boolean doInBackground() throws Exception { - if (JTemplate.isValid(template)) { - //给要关闭的模板解锁 - WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(template.getPath()); - return true; + @Override + protected void done() { + try { + if (get()) { + // 创建备份成功后,关闭原模板 + HistoryTemplateListCache.getInstance().closeSelectedReport(template); } - return false; - } - - @Override - protected void done() { - try { - if (get()) { - // 创建备份成功后,关闭原模板 - HistoryTemplateListCache.getInstance().closeSelectedReport(template); - } - if (openNewTemplate) { - DesignerContext.getDesignerFrame().openTemplate(file); - } - // 备份成功刷新下目录树 展示出来备份的模板 - TemplateTreePane.getInstance().refresh(); - } catch (Exception e) { - SaveFailureHandler.getInstance().process(e); - FineLoggerFactory.getLogger().error(e.getMessage(), e); + if (openNewTemplate) { + DesignerContext.getDesignerFrame().openTemplate(file); } + // 备份成功刷新下目录树 展示出来备份的模板 + TemplateTreePane.getInstance().refresh(); + } catch (Exception e) { + SaveFailureHandler.getInstance().process(e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } - }.execute(); + } + }.execute(); + } + + private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { + createTemplate(file, oldPath, createByEditingTemplate).thenApply((Function) aBoolean -> { + if (aBoolean) { + openNewTemplate(file, openNewTemplate, template); + } return null; }); } From 7dde3b763a6f0616b9aa6b30a8a4d54f3825f0de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 15:42:08 +0800 Subject: [PATCH 07/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0--=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/utils/TemplateUtils.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index 0cbbc4002..3b4d11e2f 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -174,10 +174,9 @@ public class TemplateUtils { } /** - * - * @param file 模板文件 + * @param file 模板文件 * @param openNewTemplate 是否需要打开新模板 - * @param template 需要关闭的模板 + * @param template 需要关闭的模板 */ private static void openNewTemplate(FILE file, boolean openNewTemplate, @Nullable JTemplate template) { new SwingWorker() { From 7d36e6f0454b78931c14430b0170cda5222da672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 18:58:44 +0800 Subject: [PATCH 08/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0--=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/utils/TemplateUtils.java | 102 ++++++++++++------ 1 file changed, 70 insertions(+), 32 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index f3d062946..9e48ae137 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -24,6 +24,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.SwingWorker; import java.io.OutputStream; import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -44,7 +46,7 @@ public class TemplateUtils { * @param openNewTemplate 是否需要在创建后打开模板 */ public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate) { - createAndOpenTemplate(prefix, file, createByEditingTemplate, openNewTemplate, () -> {}); + createAndOpenTemplate(prefix, file, createByEditingTemplate, openNewTemplate, null); } /** @@ -66,15 +68,33 @@ public class TemplateUtils { Runnable doAfterCreateTemplate; //判断一下要保存的文件是否已打开 int index = HistoryTemplateListCache.getInstance().contains(file); - if (index == -1) { - doAfterCreateTemplate = () -> {}; - } else { - JTemplate template = HistoryTemplateListCache.getInstance().getHistoryList().get(index); - doAfterCreateTemplate = () -> HistoryTemplateListCache.getInstance().closeSelectedReport(template); + JTemplate template = null; + if (index != -1) { + template = HistoryTemplateListCache.getInstance().getHistoryList().get(index); } - createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, doAfterCreateTemplate); + createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, template); } + /** + * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate + * + * @param prefix 模板文件名称前缀 + * @param file 模板文件 + * @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板 + * 为true时以CurrentEditingTemplate为准创建新模板 + * 为false时以传入的File文件为准创建新模板,此文件可以不是编辑状态 + * @param openNewTemplate 是否需要在创建后打开模板 + * @param template 备份成功后需要关闭的模板 + */ + public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { + String oldPath = file.getPath(); + file = getSavedFile(prefix, file); + if (file == null) { + return; + } + + createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, template); + } /** * 返回值可以为null, 为null表示没有点击保存按钮或者传递进来的文件file本身不满足格式要求 @@ -113,29 +133,15 @@ public class TemplateUtils { /** * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate * - * @param prefix 模板文件名称前缀 - * @param file 模板文件 + * @param file saveAs的模板文件 * @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板 * 为true时以CurrentEditingTemplate为准创建新模板 * 为false时以传入的File文件为准创建新模板,此文件可以不是编辑状态 - * @param openNewTemplate 是否需要在创建后打开模板 - * @param doAfterCreateTemplate 创建备份模板成功后调用 + * @param oldPath 被saveAs的文件路径 */ - public static void createAndOpenTemplate(String prefix, FILE file, boolean createByEditingTemplate, boolean openNewTemplate, Runnable doAfterCreateTemplate) { - String oldPath = file.getPath(); - file = getSavedFile(prefix, file); - if (file == null) { - return; - } - - createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, doAfterCreateTemplate); - } - - private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, Runnable doAfterCreateTemplate) { - new SwingWorker() { - - @Override - protected Boolean doInBackground() throws Exception { + private static CompletableFuture createTemplate(FILE file, String oldPath, boolean createByEditingTemplate) { + return CompletableFuture.supplyAsync(() -> { + try { // 读取模板数据 byte[] content = getTemplateData(createByEditingTemplate, oldPath); OutputStream out = null; @@ -144,7 +150,7 @@ public class TemplateUtils { boolean saveAsLock = WorkContext.getCurrent().get(TplOperator.class).saveAs(file.getPath()); if (!saveAsLock) { // 加锁失败时,直接返回 - return false; + throw new RuntimeException("[RemoteDesign] back up template file failed"); } out = file.asOutputStream(); out.write(content); @@ -159,20 +165,43 @@ public class TemplateUtils { } } return true; + } catch (Exception e) { + SaveFailureHandler.getInstance().process(e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + return false; } + }); + } + /** + * 打开新saveAs的新模板并关闭指定的旧模板 + * + * @param file 模板文件 + * @param openNewTemplate 是否需要打开新模板 + * @param template 需要关闭的模板 + */ + private static void openNewTemplateAndCloseOldTemplate(FILE file, boolean openNewTemplate, @Nullable JTemplate template) { + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + if (JTemplate.isValid(template)) { + //给要关闭的模板解锁 + WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(template.getPath()); + return true; + } + return false; + } @Override protected void done() { try { - if (!get()) { - throw new Exception("[RemoteDesign] back up template file failed"); + if (get()) { + //模板释放锁成功后关闭该模板 + HistoryTemplateListCache.getInstance().closeSelectedReport(template); } - // 创建备份成功后,关闭原模板 - doAfterCreateTemplate.run(); if (openNewTemplate) { DesignerContext.getDesignerFrame().openTemplate(file); } - // 备份成功刷新下目录树 展示出来备份的模板 + // 刷新下目录树 TemplateTreePane.getInstance().refresh(); } catch (Exception e) { SaveFailureHandler.getInstance().process(e); @@ -182,6 +211,15 @@ public class TemplateUtils { }.execute(); } + private static void createAndOpenTemplate0(FILE file, String oldPath, boolean createByEditingTemplate, boolean openNewTemplate, @Nullable JTemplate template) { + createTemplate(file, oldPath, createByEditingTemplate).thenApply((Function) aBoolean -> { + if (aBoolean) { + openNewTemplateAndCloseOldTemplate(file, openNewTemplate, template); + } + return null; + }); + } + /** * 读取模板文件数据 * From 82933300a5a4242739df9cffd26ac7696b36e884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 19:02:45 +0800 Subject: [PATCH 09/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0--=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/utils/TemplateUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index 9e48ae137..ceb21dfd6 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -174,7 +174,7 @@ public class TemplateUtils { } /** - * 打开新saveAs的新模板并关闭指定的旧模板 + * 打开saveAs的新模板并关闭指定的旧模板 * * @param file 模板文件 * @param openNewTemplate 是否需要打开新模板 From 82f00839d05f7b72f2687962a26021db4da29ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=2EYing-=E5=BA=94=E5=BF=97=E6=B5=A9?= Date: Thu, 6 Apr 2023 19:08:56 +0800 Subject: [PATCH 10/13] =?UTF-8?q?REPORT-92893=20=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E7=9A=84=E6=A8=A1=E6=9D=BF=EF=BC=8C=E9=87=8D=E5=A4=8D=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E5=89=AF=E6=9C=AC=EF=BC=8C=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0--=E6=94=B9=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/utils/TemplateUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index ceb21dfd6..9b426b5c8 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -131,7 +131,7 @@ public class TemplateUtils { } /** - * 创建新的模板文件并打开模板,并在创建备份模板成功后执行doAfterCreate + * 生成备份模板 * * @param file saveAs的模板文件 * @param createByEditingTemplate 是否根据 当前编辑模板 来创建新模板 From d1d46dc5472a736d7ef2dbd944700bd15d9aa5be Mon Sep 17 00:00:00 2001 From: obo Date: Tue, 11 Apr 2023 14:29:47 +0800 Subject: [PATCH 11/13] =?UTF-8?q?REPORT-92161=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E5=9B=BE=E6=A0=87-=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E7=9B=B8=E5=85=B3-=E9=83=A8=E5=88=86=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E6=97=A0=E5=8F=8D=E8=89=B2=E5=A4=84=E7=90=86=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=90=8E=E5=B0=B1=E7=9C=8B=E4=B8=8D=E5=88=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gui/controlpane/JListControlPane.java | 49 +++++++++++--- .../com/fr/design/utils/IconColorUtils.java | 67 ------------------- 2 files changed, 39 insertions(+), 77 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java index 7a1fcd9a4..37bc66871 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java @@ -7,7 +7,6 @@ import com.fr.design.gui.ilist.JNameEdList; import com.fr.design.gui.ilist.ListModelElement; import com.fr.design.gui.ilist.ModNameActionListener; import com.fr.design.i18n.Toolkit; -import com.fr.design.utils.IconColorUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.event.Listener; import com.fr.general.ComparatorUtils; @@ -18,12 +17,13 @@ import com.fr.stable.Nameable; import com.fr.stable.StringUtils; import com.fr.stable.core.PropertyChangeAdapter; -import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListModel; import javax.swing.Icon; +import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JPopupMenu; +import javax.swing.ListCellRenderer; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; @@ -346,25 +346,46 @@ public abstract class JListControlPane extends JControlPane implements ListContr } protected class NameableListCellRenderer extends - DefaultListCellRenderer { + JPanel implements ListCellRenderer { + + private final JLabel textLabel; + private final JLabel iconLabel; + + /** + * JList默认单元格渲染器的选中背景色 + */ + private final Color selectedBgColor = new Color(65, 155, 249); + protected NameableListCellRenderer() { + setLayout(new BorderLayout()); + this.textLabel = new JLabel(); + this.iconLabel = new JLabel(); + add(this.textLabel, BorderLayout.CENTER); + add(this.iconLabel, BorderLayout.WEST); + this.iconLabel.setBackground(Color.WHITE); + //iconLabel和textLabel的背景颜色不会被JList背景颜色覆盖,开发者自定义 + this.textLabel.setOpaque(true); + this.iconLabel.setOpaque(true); + } + @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - super.getListCellRendererComponent(list, value, index, isSelected, - cellHasFocus); if (value instanceof ListModelElement) { ListModelElement element = ((ListModelElement) value); Nameable nameable = element.wrapper; - this.setText(nameable.getName()); + this.textLabel.setText(nameable.getName()); boolean iconSet = false; for (NameableCreator creator : JListControlPane.this.creators()) { if (creator.menuIcon() != null && creator.acceptObject2Populate(nameable) != null) { - Icon icon = creator.menuIcon(); + this.iconLabel.setIcon(creator.menuIcon()); if(isSelected) { - icon = IconColorUtils.convert(icon, Color.WHITE); + this.textLabel.setBackground(selectedBgColor); + this.textLabel.setForeground(Color.WHITE); + } else { + this.textLabel.setBackground(Color.WHITE); + this.textLabel.setForeground(Color.BLACK); } - this.setIcon(icon); this.setToolTipText(creator.createTooltip()); iconSet = true; break; @@ -376,8 +397,16 @@ public abstract class JListControlPane extends JControlPane implements ListContr } return this; } - } + /** + * 改造后兼容基类NoIconNameableListCellRenderer使用,添加此setIcon函数 + * + * @param icon 图标,可为null + */ + public void setIcon(Icon icon) { + this.iconLabel.setIcon(icon); + } + } @Override public BasicBeanPane createPaneByCreators(NameableCreator creator) { return Reflect.on(creator.getUpdatePane()).create().get(); diff --git a/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java b/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java deleted file mode 100644 index b4b0db9a5..000000000 --- a/designer-base/src/main/java/com/fr/design/utils/IconColorUtils.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.fr.design.utils; - -import javax.swing.Icon; -import javax.swing.ImageIcon; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.image.BufferedImage; - - -/** - * 对Icon进行颜色处理的工具类 - * - * @author obo - * @since 11.0 - * Created on 2023/4/3 - */ -public final class IconColorUtils { - - /** - * 转色处理并返回处理后的Icon - * - * @param icon 需要转色处理的icon - * @param color 需要转的颜色,可能要和视觉沟通 - * @return 转色后的icon - */ - public static Icon convert(Icon icon, Color color) { - BufferedImage image = iconToImage(icon); - Image convertedImage = createConvertedImage(image, color); - return new ImageIcon(convertedImage); - } - - /** - * 获取icon中的image对象,虽然设计器中未来大部分图标会读取为SVGIcon类型,其中直接包含image对象 - * 但存在某些特殊情况,例如绘制带警告图标的数据集时,无法直接获取image对象,因此统一使用此方法获取 - * - * @param icon 需要获取image的icon - * @return 获取icon对应的image - */ - private static BufferedImage iconToImage(Icon icon) { - BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); - Graphics2D g2d = image.createGraphics(); - icon.paintIcon(null, g2d, 0, 0); - g2d.dispose(); - return image; - } - - /** - * 转色 - * - * @param image 需要转色的image - * @param color 需要转的颜色,可能要和视觉沟通 - * @return 转色后的image - */ - private static Image createConvertedImage(BufferedImage image, Color color) { - int colorRgb = (color.getRGB() & 0x00FFFFFF); - for (int x = 0; x < image.getWidth(); x++) { - for (int y = 0; y < image.getHeight(); y++) { - int originalArgb = image.getRGB(x, y); - int alpha = (originalArgb >> 24) & 0xFF; - int newArgb = (alpha << 24) | colorRgb; - image.setRGB(x, y, newArgb); - } - } - return image; - } -} \ No newline at end of file From c53183a30c374f1b1d68409463f9fa89c249944c Mon Sep 17 00:00:00 2001 From: obo Date: Tue, 11 Apr 2023 15:02:39 +0800 Subject: [PATCH 12/13] =?UTF-8?q?REPORT-92161=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E5=9B=BE=E6=A0=87-=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E7=9B=B8=E5=85=B3-=E9=83=A8=E5=88=86=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E6=97=A0=E5=8F=8D=E8=89=B2=E5=A4=84=E7=90=86=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=90=8E=E5=B0=B1=E7=9C=8B=E4=B8=8D=E5=88=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/ilist/JNameEdList.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ilist/JNameEdList.java b/designer-base/src/main/java/com/fr/design/gui/ilist/JNameEdList.java index c12a22505..f4c3cfe92 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ilist/JNameEdList.java +++ b/designer-base/src/main/java/com/fr/design/gui/ilist/JNameEdList.java @@ -11,15 +11,20 @@ import com.fr.stable.core.PropertyChangeAdapter; import javax.swing.ListModel; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; -import java.util.ArrayList; -import java.util.Vector; import java.awt.Component; import java.awt.Rectangle; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.util.ArrayList; +import java.util.Vector; public class JNameEdList extends UIList implements CellEditorListener { - private static final int ICON_WIDTH = 20; + + /** + * 原值为20,设计器图标由png替换为svg之后JNameEdList的icon大小为16x16 + * 重命名是会出现左侧一部分带有背景色的渲染 + */ + private static final int ICON_WIDTH = 16; private boolean editable = true; // kunsnat: 是否强制ListName是数字 (int型) From 2f158aec7f773a38f17fe1867f7634bedd02a431 Mon Sep 17 00:00:00 2001 From: obo Date: Tue, 11 Apr 2023 19:12:54 +0800 Subject: [PATCH 13/13] =?UTF-8?q?REPORT-92161=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8-=E5=9B=BE=E6=A0=87-=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E7=9B=B8=E5=85=B3-=E9=83=A8=E5=88=86=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E6=97=A0=E5=8F=8D=E8=89=B2=E5=A4=84=E7=90=86=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=90=8E=E5=B0=B1=E7=9C=8B=E4=B8=8D=E5=88=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/controlpane/JListControlPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java index 37bc66871..37134ec99 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/JListControlPane.java @@ -399,7 +399,7 @@ public abstract class JListControlPane extends JControlPane implements ListContr } /** - * 改造后兼容基类NoIconNameableListCellRenderer使用,添加此setIcon函数 + * 改造后兼容子类NoIconNameableListCellRenderer使用,添加此setIcon函数 * * @param icon 图标,可为null */