From 6f4d11c2878c7642af769de022d1060cea04eec9 Mon Sep 17 00:00:00 2001 From: Yvan Date: Thu, 27 Aug 2020 16:08:20 +0800 Subject: [PATCH 1/7] =?UTF-8?q?REPORT-37262=20=E8=BF=9C=E7=A8=8B=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E8=B4=A6=E5=8F=B7=E5=AF=86=E7=A0=81=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=201.=20=E5=81=9A=E7=9A=84=E6=98=AF=E8=BF=99?= =?UTF-8?q?=E4=B8=AA=E8=BF=AD=E4=BB=A3=E4=BB=BB=E5=8A=A1=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=AD=90=E4=BB=BB=E5=8A=A1=EF=BC=8C=E5=8A=9F=E8=83=BD=E4=B8=BA?= =?UTF-8?q?=EF=BC=9A=E5=AF=86=E7=A0=81=E8=BE=93=E5=85=A5=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=95=BF=E5=BA=A6=EF=BC=8C=E5=86=8D=E6=AC=A1?= =?UTF-8?q?=E6=89=93=E5=BC=80=E6=97=B6=E9=9A=90=E8=97=8F=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=EF=BC=8C=E7=BB=9F=E4=B8=80=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=BA8=E4=BD=8D=E7=9A=84=E5=8A=A0=E5=AF=86=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=EF=BC=8C=E7=82=B9=E5=87=BB=E5=AF=86=E7=A0=81=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=A1=86=E5=81=9A=E8=BE=93=E5=85=A5=E6=88=96=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=AF=86=E7=A0=81=E5=8A=A8=E4=BD=9C=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=85=88=E6=B8=85=E7=A9=BA=E5=AF=86=E7=A0=81=EF=BC=8C=E5=86=8D?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E5=86=85=E5=AE=B9=EF=BC=8C=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=90=8E=E7=94=9F=E6=95=88=202.=20=E5=86=99=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AAUIPasswordField=E7=9A=84=E5=AD=90=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E7=9B=B8=E6=AF=94UIPasswordField=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E4=B8=8A=E8=BF=B0=E5=8A=9F=E8=83=BD=203.=20=E5=B0=86=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E5=9C=BA=E6=99=AF=E4=B8=AD=E7=9A=84=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E6=A1=86=E6=9B=BF=E6=8D=A2=E4=B8=BA=E6=96=B0=E7=9A=84UIPasswor?= =?UTF-8?q?dFieldWithFixedLength=204.=20=E4=BF=AE=E6=94=B9=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=AF=BC=E5=8C=85=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/connect/JDBCDefPane.java | 18 ++- .../UIPasswordFieldWithFixedLength.java | 106 ++++++++++++++++++ .../main/java/com/fr/env/RemoteEnvPane.java | 17 ++- 3 files changed, 134 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/gui/ipasswordfield/UIPasswordFieldWithFixedLength.java diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java index 5e8199d95..683b38e01 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/JDBCDefPane.java @@ -8,7 +8,7 @@ import com.fr.design.border.UITitledBorder; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.ipasswordfield.UIPassWordField; +import com.fr.design.gui.ipasswordfield.UIPasswordFieldWithFixedLength; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.ilable.ActionLabel; import com.fr.design.layout.FRGUIPaneFactory; @@ -24,8 +24,18 @@ import com.fr.general.ComparatorUtils; import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -108,7 +118,7 @@ public class JDBCDefPane extends JPanel { urlTextField = new UITextField(15); userNameTextField = new UITextField(15); userNameTextField.setName(USER_NAME); - passwordTextField = new UIPassWordField(15); + passwordTextField = new UIPasswordFieldWithFixedLength(15); dbtypeButton = new UIButton("."); dbtypeButton.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Click_Get_Default_URL")); dbtypeButton.addActionListener(dbtypeButtonActionListener); diff --git a/designer-base/src/main/java/com/fr/design/gui/ipasswordfield/UIPasswordFieldWithFixedLength.java b/designer-base/src/main/java/com/fr/design/gui/ipasswordfield/UIPasswordFieldWithFixedLength.java new file mode 100644 index 000000000..c1cb98ca3 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/ipasswordfield/UIPasswordFieldWithFixedLength.java @@ -0,0 +1,106 @@ +package com.fr.design.gui.ipasswordfield; + +import com.fr.stable.StringUtils; +import org.jetbrains.annotations.NotNull; + +import javax.swing.text.Document; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +/** + * @author Yvan + * @version 10.0 + * Created by Yvan on 2020-08-11 + * 有固定长度的"*"回显的密码框,避免泄露密码长度 + */ +public class UIPasswordFieldWithFixedLength extends UIPassWordField { + /** + * 展示密码,为固定8位长度的特殊字符"*"组成 + */ + private static final String DISPLAY_PASSWORD = "********"; + + /** + * 实际密码 + */ + private String realPassword; + + /** + * 用于判断是否清空密码 + */ + private boolean clearPassword; + + public UIPasswordFieldWithFixedLength() { + this(null, null, 0); + } + + public UIPasswordFieldWithFixedLength(String text) { + this(null, text, 0); + } + + public UIPasswordFieldWithFixedLength(int columns) { + this(null, null, columns); + } + + public UIPasswordFieldWithFixedLength(String text, int columns) { + this(null, text, columns); + } + + public UIPasswordFieldWithFixedLength(Document doc, String txt, int columns) { + super(doc, txt, columns); + initRealPassword(txt); + } + + /** + * 为realPassword赋初值并添加一个鼠标单击事件 + */ + public void initRealPassword(String text) { + this.realPassword = text == null ? StringUtils.EMPTY : text; + this.clearPassword = true; + addShowFixedLengthPasswordListener(); + } + + /** + * 当鼠标点击密码框,第一次做出键入动作时,清空显示密码与实际密码,用户需要重新输入密码 + */ + private void addShowFixedLengthPasswordListener() { + this.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + UIPasswordFieldWithFixedLength.this.clearPassword = true; + } + }); + this.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (clearPassword) { + UIPasswordFieldWithFixedLength.this.setText(StringUtils.EMPTY); + UIPasswordFieldWithFixedLength.this.clearPassword = false; + UIPasswordFieldWithFixedLength.this.updateUI(); + } + } + }); + } + + @Override + public void setText(@NotNull String t) { + this.realPassword = t; + // 看到代码中有些场景是将密码置为空字符串的,所以在这里加个判断 + if (StringUtils.isEmpty(t)) { + super.setText(t); + } else { + super.setText(DISPLAY_PASSWORD); + } + } + + @Override + public char[] getPassword() { + //如果用户刚清空密码框,并输入了新密码,则返回输入内容,否则返回realPassword + String text = new String(super.getPassword()); + if (!StringUtils.isEmpty(text) && StringUtils.isEmpty(realPassword)) { + return text.toCharArray(); + } + return realPassword.toCharArray(); + } +} diff --git a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java index bc32385b7..54cfddc8d 100644 --- a/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/main/java/com/fr/env/RemoteEnvPane.java @@ -13,6 +13,7 @@ import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ipasswordfield.UIPassWordField; +import com.fr.design.gui.ipasswordfield.UIPasswordFieldWithFixedLength; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; @@ -26,7 +27,17 @@ import com.fr.workspace.WorkContext; import com.fr.workspace.connect.WorkspaceConnectionInfo; import com.fr.workspace.engine.exception.WorkspaceAuthException; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.JTextPane; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; +import javax.swing.ToolTipManager; +import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @@ -96,7 +107,7 @@ public class RemoteEnvPane extends BasicBeanPane { /** * 密码 */ - private UIPassWordField passwordInput = new UIPassWordField(); + private UIPassWordField passwordInput = new UIPasswordFieldWithFixedLength(); /** * 是否记住密码 */ @@ -108,7 +119,7 @@ public class RemoteEnvPane extends BasicBeanPane { /** * https密钥 */ - private UIPassWordField certSecretKeyInput = new UIPassWordField(); + private UIPassWordField certSecretKeyInput = new UIPasswordFieldWithFixedLength(); /** * 选择证书文件按钮 */ From 2433240bce61db3c66b56a4b96e69dee4b4aa54f Mon Sep 17 00:00:00 2001 From: kerry Date: Thu, 27 Aug 2020 18:22:52 +0800 Subject: [PATCH 2/7] =?UTF-8?q?REPORT-38272=20&&=20REPORT-38287=20&&=20REP?= =?UTF-8?q?ORT-37922=E3=80=90frm=E8=AE=BE=E8=AE=A1=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=BC=A9=E6=94=BE=E3=80=91=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E6=8E=A7=E4=BB=B6=E5=A6=82=E6=9E=9C=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E8=BE=83=E5=A4=A7=E7=9A=84=E7=BC=A9=E6=94=BE=E5=B9=85?= =?UTF-8?q?=E5=BA=A6=EF=BC=8C=E4=BC=9A=E9=81=AE=E6=8C=A1=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/beans/models/AddingModel.java | 8 ++--- .../mainframe/EditingMouseListener.java | 29 ++++++++++++++----- .../fr/design/mainframe/FormDesignerUI.java | 8 ++--- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/AddingModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/AddingModel.java index 637279bf2..c0b6cd400 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/AddingModel.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/AddingModel.java @@ -133,13 +133,13 @@ public class AddingModel { Rectangle rect = ComponentUtils.getRelativeBounds(container); if (!ComparatorUtils.equals(container.getOuterLayout(), container.getBackupParent())) { added = container.getLayoutAdapter().addBean(creator, - x + designer.getArea().getHorizontalValue(), - y + designer.getArea().getVerticalValue()); + x + designer.getHorizontalScaleValue(), + y + designer.getVerticalScaleValue() ); return added; } added = container.getLayoutAdapter().addBean(creator, - x + designer.getArea().getHorizontalValue() - rect.x, - y + designer.getArea().getVerticalValue() - rect.y); + x + designer.getHorizontalScaleValue() - rect.x, + y + designer.getVerticalScaleValue() - rect.y); return added; } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java index 2fa3dea64..01de4a1da 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/EditingMouseListener.java @@ -11,7 +11,13 @@ import com.fr.design.designer.beans.location.Direction; import com.fr.design.designer.beans.location.Location; import com.fr.design.designer.beans.models.SelectionModel; import com.fr.design.designer.beans.models.StateModel; -import com.fr.design.designer.creator.*; +import com.fr.design.designer.creator.XChartEditor; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XCreatorUtils; +import com.fr.design.designer.creator.XEditorHolder; +import com.fr.design.designer.creator.XElementCase; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.creator.cardlayout.XCardSwitchButton; import com.fr.design.designer.creator.cardlayout.XWCardLayout; import com.fr.design.form.util.XCreatorConstants; @@ -22,14 +28,20 @@ import com.fr.design.icon.IconPathConstants; import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.LayoutUtils; - import com.fr.share.ShareConstants; import com.fr.stable.Constants; - import com.fr.stable.StringUtils; -import javax.swing.*; + +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPopupMenu; +import javax.swing.JWindow; +import javax.swing.SwingUtilities; import javax.swing.event.MouseInputAdapter; -import java.awt.*; +import java.awt.Color; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.Rectangle; import java.awt.event.MouseEvent; /** @@ -165,10 +177,13 @@ public class EditingMouseListener extends MouseInputAdapter { if (designer.isDrawLineMode()) { designer.updateDrawLineMode(e); } else { + int relativeX = Math.max(0, designer.getRelativeX(e.getX())); + int relativeY = Math.max(0, designer.getRelativeY(e.getY())); + if (selectionModel.hasSelectionComponent() && selectionModel.getSelection().getRelativeBounds().contains( - designer.getArea().getHorizontalValue() + e.getX(), - designer.getArea().getVerticalValue() + e.getY())) { + designer.getHorizontalScaleValue() + relativeX, + designer.getVerticalScaleValue() + relativeY)) { lastPressEvent = e; lastXCreator = selectionModel.getSelection().getSelectedCreator(); } else { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java b/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java index 68ea5c2b8..26547229b 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormDesignerUI.java @@ -409,8 +409,8 @@ public class FormDesignerUI extends ComponentUI { clipg = g.create( -designer.getHorizontalScaleValue(), -designer.getVerticalScaleValue() + designer.getParaHeight(), - (int) ((parent.getSize().width + designer.getArea().getHorizontalValue()) / designer.getScale()), - (int) ((parent.getSize().height + designer.getArea().getVerticalValue()) / designer.getScale())); + parent.getSize().width + designer.getHorizontalScaleValue(), + parent.getSize().height + designer.getVerticalScaleValue()); designer.paintContent(clipg); paintWatermark((Graphics2D) clipg); @@ -435,8 +435,8 @@ public class FormDesignerUI extends ComponentUI { Graphics clipg1; clipg1 = g.create(-designer.getHorizontalScaleValue(), -designer.getVerticalScaleValue(), - (int) ((parent.getSize().width + designer.getArea().getHorizontalValue()) / designer.getScale()), - (int) ((designer.getParaHeight() + designer.getArea().getVerticalValue()) / designer.getScale())); + parent.getSize().width + designer.getHorizontalScaleValue(), + designer.getParaHeight() + designer.getVerticalScaleValue()); designer.paintPara(clipg1); clipg1.dispose(); From 91c4c7a0f050bc1da0bfd30750e3c1171ae2078f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Thu, 27 Aug 2020 19:05:34 +0800 Subject: [PATCH 3/7] =?UTF-8?q?CHART-15451=20=E6=97=A5=E6=9C=9F=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E9=9C=80=E8=A6=81=E6=98=AF=E4=B8=80=E7=A7=8D=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/chart/auto/AutoTypeCalculate.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/chart/auto/AutoTypeCalculate.java b/designer-chart/src/main/java/com/fr/design/chart/auto/AutoTypeCalculate.java index c30679e0e..c504a5064 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/auto/AutoTypeCalculate.java +++ b/designer-chart/src/main/java/com/fr/design/chart/auto/AutoTypeCalculate.java @@ -102,22 +102,22 @@ public class AutoTypeCalculate { } private static boolean isNumberData(List values) { - for (String value : values) { - if (!isNumberData(value)) { - return false; + for (Pattern pattern : dataPatterns) { + if (isNumberData(values, pattern)) { + return true; } } - return true; + return false; } - private static boolean isNumberData(String value) { - for (Pattern pattern : dataPatterns) { + private static boolean isNumberData(List values, Pattern pattern) { + for (String value : values) { Matcher matcher = pattern.matcher(value); - if (matcher.matches()) { - return true; + if (!matcher.matches()) { + return false; } } - return false; + return true; } private static List calculateField(String tableName, List columns) { From f6f6a11eaed640add7d171cf4e40d65d7c550304 Mon Sep 17 00:00:00 2001 From: pengda Date: Fri, 28 Aug 2020 09:52:20 +0800 Subject: [PATCH 4/7] =?UTF-8?q?REPORT-35386=20=E5=A4=9A=E4=B8=AAtab?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=92=A4=E9=94=80=EF=BC=8C=E4=BC=9A=E6=92=A4?= =?UTF-8?q?=E9=94=80=E4=B8=A4=E4=B8=AAtab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/designer/creator/cardlayout/XCardAddButton.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java index 6909207c3..7718e266f 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/cardlayout/XCardAddButton.java @@ -86,7 +86,6 @@ public class XCardAddButton extends XButton { @Override public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e){ FormDesigner designer = editingMouseListener.getDesigner(); - designer.fireTargetModified(); // addbutton对应的XWCardLayout和XWCardTagLayout暂未存入到xml中,重新打开之后先根据父子层获取 if(cardLayout == null && tagLayout ==null ){ @@ -112,6 +111,8 @@ public class XCardAddButton extends XButton { showNewTab(editingMouseListener,index); tagLayout.setTabsAndAdjust(); LayoutUtils.layoutRootContainer(designer.getRootComponent()); + + designer.fireTargetModified(); } @Override From 28188b2ce8b34063ba8493708dca34b62f05935a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Fri, 28 Aug 2020 10:07:06 +0800 Subject: [PATCH 5/7] =?UTF-8?q?CHART-15451=20=E5=A2=9E=E5=8A=A0=E6=97=A0?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E7=9A=84=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/chart/AutoChartTypePane.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java b/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java index b7974fb6e..5c5cbcac4 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java +++ b/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java @@ -63,6 +63,9 @@ public class AutoChartTypePane extends ChartWizardPane implements CallbackEvent private AutoProgressBar connectionBar; private SwingWorker worker; + //暂时不做国际化 + private static final String MESSAGE = "当前数据没有匹配到合适的图表,请调整数据后再次尝试。"; + public AutoChartTypePane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); initButtonGroup(); @@ -226,6 +229,9 @@ public class AutoChartTypePane extends ChartWizardPane implements CallbackEvent chartResultModel.addElement(autoChartIcon); } chartViewList.setSelectedIndex(0); + } else { + FineJOptionPane.showMessageDialog(AutoChartTypePane.this, MESSAGE, + Toolkit.i18nText("Fine-Design_Basic_Message"), JOptionPane.INFORMATION_MESSAGE, UIManager.getIcon("OptionPane.informationIcon")); } } catch (Exception e) { if (!(e instanceof CancellationException)) { From ea414756a0eea7028b31b390f8f93bcd87fdaedd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Fri, 28 Aug 2020 10:19:28 +0800 Subject: [PATCH 6/7] =?UTF-8?q?CHART-15451=20=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/chart/AutoChartTypePane.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java b/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java index 5c5cbcac4..589028ae5 100644 --- a/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java +++ b/designer-chart/src/main/java/com/fr/design/chart/AutoChartTypePane.java @@ -63,8 +63,7 @@ public class AutoChartTypePane extends ChartWizardPane implements CallbackEvent private AutoProgressBar connectionBar; private SwingWorker worker; - //暂时不做国际化 - private static final String MESSAGE = "当前数据没有匹配到合适的图表,请调整数据后再次尝试。"; + private static final String MESSAGE = Toolkit.i18nText("Fine-Design_Chart_Auto_No_Match"); public AutoChartTypePane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); From ef6fc5872c77be15e199e36adad83b68b3971a05 Mon Sep 17 00:00:00 2001 From: Yvan Date: Fri, 28 Aug 2020 11:38:48 +0800 Subject: [PATCH 7/7] =?UTF-8?q?REPORT-37915=20=E6=8A=A5=E8=A1=A8=E5=88=86?= =?UTF-8?q?=E6=A0=8F=E5=BC=B9=E7=AA=97=E6=98=BE=E7=A4=BA=E6=9C=AA=E9=80=82?= =?UTF-8?q?=E9=85=8D=E5=9B=BD=E9=99=85=E5=8C=96=201.=20=E4=B8=BA=E6=AF=8F?= =?UTF-8?q?=E7=A7=8D=E8=AF=AD=E8=A8=80=E9=83=BD=E9=80=82=E9=85=8D=E4=BA=86?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=88=86=E6=A0=8F=E5=BC=B9=E7=AA=97=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E7=A4=BA=E4=BE=8B=E5=9B=BE=E7=89=87=202.=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=AF=B9=E5=BA=94=E5=9B=BD=E9=99=85=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=AD=E4=BB=A3=E8=A1=A8=E6=AD=A4=E7=A4=BA=E4=BE=8B?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E7=9A=84=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/images/reportcolumns/col_ja_JP.png | Bin 0 -> 2507 bytes .../fr/design/images/reportcolumns/col_ko_KR.png | Bin 0 -> 2356 bytes .../images/reportcolumns/{col.png => col_zh.png} | Bin .../fr/design/images/reportcolumns/col_zh_TW.png | Bin 0 -> 2587 bytes .../fr/design/images/reportcolumns/row_ja_JP.png | Bin 0 -> 2748 bytes .../fr/design/images/reportcolumns/row_ko_KR.png | Bin 0 -> 2537 bytes .../images/reportcolumns/{row.png => row_zh.png} | Bin .../fr/design/images/reportcolumns/row_zh_TW.png | Bin 0 -> 2793 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ja_JP.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ko_KR.png rename designer-base/src/main/resources/com/fr/design/images/reportcolumns/{col.png => col_zh.png} (100%) create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_zh_TW.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ja_JP.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ko_KR.png rename designer-base/src/main/resources/com/fr/design/images/reportcolumns/{row.png => row_zh.png} (100%) create mode 100644 designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh_TW.png diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ja_JP.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ja_JP.png new file mode 100644 index 0000000000000000000000000000000000000000..3a22b64a6076dc831d577a52d79600123d9b019e GIT binary patch literal 2507 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 VxgM1vNUZ<>002ovPDHLkV1l12zQF(h literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ko_KR.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/col_ko_KR.png new file mode 100644 index 0000000000000000000000000000000000000000..3041f446bb15b75eaf555d08dae30abe7ea1ddf8 GIT binary patch literal 2356 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 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ja_JP.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_ja_JP.png new file mode 100644 index 0000000000000000000000000000000000000000..83480d429516acd8aade8b920c0c7d48b525280c GIT binary patch literal 2748 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 literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh.png similarity index 100% rename from designer-base/src/main/resources/com/fr/design/images/reportcolumns/row.png rename to designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh.png diff --git a/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh_TW.png b/designer-base/src/main/resources/com/fr/design/images/reportcolumns/row_zh_TW.png new file mode 100644 index 0000000000000000000000000000000000000000..935d1059d5ec5efd77171405fd8b19de37ec13dc GIT binary patch literal 2793 zcmV3hf6kat{4Ml5=p`ykbT0uh1p%JA)sRS`ckcJ=Tp&~?# zK}4t&QG&KwF$GNxtwcz~5J^d?D5G5vW?VDis$OE7d8=h^hdDPMtal777u#ckiBHst`}8x_$dL zRZ^@|)CmIG5D>CzgH{x)M!@A{eemD`<>lq6u9xWhfq=VV%QmYkTlW0<^VGF#S9#J$}OTbGgb>({SLI1mi`!NI{yx~ET{QdU+L zldgaN{^aN9NA23Ro{Hgr0!uU@^Pl#~?uF?B|7-@YY(e}CG(eLIu$*|TR%R`i$&2?-Pt z5y9oVe*HR|4Eg!_bocIEYSye7B_$=%qeqXZsHli8Uc5**Zrq^I&`_t>r~D1k>({Se zzx*Mm?zL4$bs1UFOUB2?)8N5_DKIdQ zAL|%Q!T$8|@nJ&3_VV`j<^k5XZ{O(S$B*3m9yxM^qN1XBKm|@FCMNRvpFVveygl-C zaaU|zW(H(rWKf?zeVCZAnK62Q`0yc*^g%WN4$^|Ksi~>dq)8Jt3376B_%R3a!p_AO zy)8bN5kPP3>Ef=~x{R!Y1`XoJzC|odLya6clG?Uy%O*j~mMxi}6DLlj@bGXx4ZSXU zVF>J5*tWxl4dX%A%$YO!cvx5%Z$0^syJG7yvRY(9Pl(U``}b-0?%iefDt_h zvxeThdBd{<81-MhdX?u^L2C4}moHzY6)RS-ItL6x-Et*MBA+0I4!oos5H&CqA_?}g9eMMb41VGjc7cQ{h8lGUYX3e5jty+~k!>nB) zt6A;g)Y43wHjQS?n8EkNqcAaf0T}o2U7% zj;Xf|Sz}^i9IL5Z{SyLkuH3U{4_&)Q(4Y*qG+%>57Se4?| z;;~I{&x(u9YR`7_$WjYgJ+j&DS!r946(NO?_(DV<0>IdGF`lf5iamb(c-p#kD)-HHHh$B!SUqeqW&1VO9}TDNYU(SAZEH}>z!27<0ywTkA> zoy)wq@>ml|!eTGdAqGLRJ61b>Y=YMmq7iXnhF49F$6bm>yQ5K9H8PMu1V zCr>UjyDFwp|Jla(tjIpNaN$B)uwVhTZ{J=&A|7%Fc(Wo6lQjcijRQYs>1@tBud&U^H2gNEjaxeFz{K-iQ$+^xZ(AW^?;|g_RUl?ty@i)jitLBWfXJ z^@wJ6k4lPLi+i-AN7O>xS~N7XxV5MURoq(CV=5XoA|N)aMsP*7S_FiwYVj0p8WFGs zS@GWb#fujjVGz}JK)~oXSOD6UP`7Sf0%_N-T}xPmA>tSU`T6<0F2K@KQc}XN zUg4GD@9%FNHfn1$S+S5MEiH|9?b=1&-rjWV*f9=(JAL|eqd>G{VXzPg3$HCXb?Ow8 z)l{OQoJN}g=s|bv*ug|aVbL2D6%}DuL?Ht3bxTP}p$QWvDAcN6mC-$`Rb4m=&YnG+ zza}IkSche+2!X?g4^u=$gwY||QB|XRR;w){m;sm>7&mSliKl=XX6)R#lcU_I z(WYOE(PTySF&l8})-A%~5OEq*ONj9Ba5k^hYSpLBc(S7E$kZa)TGW#uG&EGbQjHpo zwplgSTU6T+0U@gm8_iRTEM)c6mbYQO#jVALjpnIE7Pl4+EiY~@>OmE^7WJ5lMvVxF z&8iVxQLPpMA*)(EMVm$hY)4i*WEIiaUdmM?{wnS z91;@3W`VjpsMln4&x#P@NGAk96B82&c588QF%JSHBDP~>NKH*85OmU{NvsHNL-1~e z2eGO78jL0@Y^X(x7L~OM+*y2meal?4%YKlZ3L}6SfP#X8vg