From a68141128895795264e099f342a5cf66e4763190 Mon Sep 17 00:00:00 2001 From: Starryi Date: Mon, 30 Aug 2021 18:27:45 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-58367=20=E3=80=90=E5=9B=9E=E5=BD=92?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E3=80=91=E8=81=9A=E5=90=88=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=85=A8=E9=80=89=E6=8A=A5=E8=A1=A8=E5=9D=97=E5=86=85=E5=AE=B9?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E8=B7=9F=E9=9A=8F=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E9=85=8D=E7=BD=AE=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 【问题原因】 交互优化变动: 单元格样式从自定义切换到跟随主题时,自动选中主题的默认样式, 且使用改样式设置单元格 【改动思路】 同上 --- .../cell/settingpane/style/StylePane.java | 32 ++++++++++++++++--- .../style/ThemedCellStyleListPane.java | 5 +-- .../com/fr/design/report/ReportStylePane.java | 7 ++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java index 59bc73d575..93bf523970 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/StylePane.java @@ -4,6 +4,8 @@ import com.fr.base.NameStyle; import com.fr.base.Style; import com.fr.design.designer.IntervalConstants; import com.fr.design.dialog.BasicPane; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; @@ -24,8 +26,10 @@ import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; -public class StylePane extends BasicPane { +public class StylePane extends BasicPane implements UIObserver { public static final String[] FOLLOWING_THEME_STRING_ARRAYS = new String[]{ Toolkit.i18nText("Fine-Design_Style_Follow_Theme"), Toolkit.i18nText("Fine-Design_Style_Not_Follow_Theme"), @@ -40,6 +44,8 @@ public class StylePane extends BasicPane { private JPanel contentPane; + private final List observerListeners = new ArrayList<>(); + public StylePane() { followingThemeButtonGroup = new UIButtonGroup<>(FOLLOWING_THEME_STRING_ARRAYS); customStylePane = new CustomStylePane(); @@ -67,7 +73,7 @@ public class StylePane extends BasicPane { int selectedIndex = followingThemeButtonGroup.getSelectedIndex(); cardLayout.show(contentPane, FOLLOWING_THEME_STRING_ARRAYS[selectedIndex]); if (selectedIndex == 1) { - // 对于同一个单元格,跟随主题切换到自定义,若跟随主题面板有选中项,则自定义中的配置与其保持一致,否则自定义中配置保持不变 + // 对于同一个单元格,跟随主题切换到自定义,自定义中的配置与其保持一致 NameStyle lastSelectedNameStyle = themedCellStyleListPane.updateBean(); if (lastSelectedNameStyle != null) { Style lastSelectedRealStyle = lastSelectedNameStyle.getRealStyle(); @@ -81,10 +87,11 @@ public class StylePane extends BasicPane { } } } else { - // 对于同一个单元格,自定义切换到跟随主题,跟随主题应当清除选中项,即没有选中任何主题中的单元格样式, - // 因为还未选中,所以自定义中的配置保持不变,此时若用户切换会自定义,配置应当与之前一样 - themedCellStyleListPane.populateBean(null); + // 对于同一个单元格,自定义切换到跟随主题,跟随主题选中"默认"样式,并使用默认样式设置选中的单元格 + themedCellStyleListPane.reset(); } + + fireStateChanged(); } }); @@ -205,4 +212,19 @@ public class StylePane extends BasicPane { } } + private void fireStateChanged() { + for (UIObserverListener listener: observerListeners) { + listener.doChange(); + } + } + + @Override + public void registerChangeListener(UIObserverListener listener) { + observerListeners.add(listener); + } + + @Override + public boolean shouldResponseChangeListener() { + return true; + } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/ThemedCellStyleListPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/ThemedCellStyleListPane.java index 59a61e2d10..65da02e989 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/ThemedCellStyleListPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/style/ThemedCellStyleListPane.java @@ -77,14 +77,15 @@ public class ThemedCellStyleListPane extends FurtherBasicBeanPane imp * 重置 */ public void reset() { - + refreshBeanElement(); + styleList.setSelectedIndex(0); } @Override public void populateBean(NameStyle ob) { refreshBeanElement(); if (ob == null) { - styleList.setSelectedIndex(-1); + styleList.setSelectedIndex(0); return; } for (int i = 0; i < defaultListModel.getSize(); i++) { diff --git a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java index 1e0537e03f..caf919b294 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ReportStylePane.java @@ -135,7 +135,7 @@ public class ReportStylePane extends BasicPane { int selectedIndex = followingThemeButtonGroup.getSelectedIndex(); cardLayout.show(contentPane, FOLLOWING_THEME_STRING_ARRAYS[selectedIndex]); if (selectedIndex == 1) { - // 对于同一个单元格,跟随主题切换到自定义,若跟随主题面板有选中项,则自定义中的配置与其保持一致,否则自定义中配置保持不变 + // 对于同一个单元格,跟随主题切换到自定义,自定义中的配置与其保持一致 NameStyle lastSelectedNameStyle = themedCellStyleListPane.updateBean(); if (lastSelectedNameStyle != null) { Style lastSelectedRealStyle = lastSelectedNameStyle.getRealStyle(); @@ -149,9 +149,8 @@ public class ReportStylePane extends BasicPane { } } } else { - // 对于同一个单元格,自定义切换到跟随主题,跟随主题应当清除选中项,即没有选中任何主题中的单元格样式, - // 因为还未选中,所以自定义中的配置保持不变,此时若用户切换会自定义,配置应当与之前一样 - themedCellStyleListPane.populateBean(null); + // 对于同一个单元格,自定义切换到跟随主题,跟随主题选中"默认"样式,并使用默认样式设置选中的单元格 + themedCellStyleListPane.reset(); } } });