From 4917ebec2ce81122e44c267f11c591e5746cae86 Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 4 Jan 2019 11:39:57 +0800 Subject: [PATCH 01/18] =?UTF-8?q?REPORT-14093=20[FindBugs=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D]=20=E4=B8=8D=E9=9C=80=E8=A6=81publi?= =?UTF-8?q?c=20static=E7=9A=84=E5=8D=95=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/loghandler/LogMessageBar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogMessageBar.java b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogMessageBar.java index 3b0593708..54bb4addc 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogMessageBar.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/loghandler/LogMessageBar.java @@ -14,7 +14,7 @@ import java.awt.event.MouseEvent; public class LogMessageBar extends JPanel { private UILabel messageLabel; private int width = 600; - public static volatile LogMessageBar THIS; + private static volatile LogMessageBar THIS; private JFrame dlg = new LogDetailPane().showDialog(); public static LogMessageBar getInstance() { From de464beffa3fa9b4ae882d225bc1e804d9e1ebc0 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 4 Jan 2019 11:42:34 +0800 Subject: [PATCH 02/18] =?UTF-8?q?REPORT-14092=20[FindBugs=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/actions/file/WebPreviewUtils.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java b/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java index 5434abc09..18c93f74c 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/WebPreviewUtils.java @@ -9,6 +9,7 @@ import com.fr.design.utils.DesignUtils; import com.fr.file.FILE; import com.fr.file.FileNodeFILE; import com.fr.general.GeneralUtils; +import com.fr.general.web.ParameterConstants; import com.fr.stable.project.ProjectConstants; import com.fr.stable.web.AbstractWebletCreator; @@ -26,7 +27,11 @@ public final class WebPreviewUtils { @SuppressWarnings("unchecked") public static void preview(JTemplate jt, PreviewProvider provider) { String baseRoute = jt.route(); - actionPerformed(jt, baseRoute, provider == null ? Collections.EMPTY_MAP : provider.parametersForPreview(), provider.getActionType()); + if (provider == null) { + actionPerformed(jt, baseRoute, Collections.EMPTY_MAP, ParameterConstants.VIEWLET); + } else { + actionPerformed(jt, baseRoute, provider.parametersForPreview(), provider.getActionType()); + } } private static void actionPerformed(JTemplate jt, String baseRoute, Map map, String actionType) { From 8094f08ff919fa8a6508ef7f5b70dc44c1844c44 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 4 Jan 2019 17:28:26 +0800 Subject: [PATCH 03/18] =?UTF-8?q?KERNEL-216=20=E5=8E=BB=E6=8E=89=E5=A5=87?= =?UTF-8?q?=E8=91=A9=E7=9A=84JsonDecode=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/alphafine/AlphaFineHelper.java | 11 +++++++---- .../search/manager/impl/HotIssuesManager.java | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineHelper.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineHelper.java index 376d63f17..1057d9286 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineHelper.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineHelper.java @@ -17,10 +17,11 @@ import com.fr.design.mainframe.alphafine.search.manager.impl.RecommendSearchMana import com.fr.design.mainframe.alphafine.search.manager.impl.SimilarSearchManager; import com.fr.general.ProcessCanceledException; import com.fr.general.http.HttpToolbox; +import com.fr.json.JSON; import com.fr.json.JSONArray; import com.fr.json.JSONException; +import com.fr.json.JSONFactory; import com.fr.json.JSONObject; -import com.fr.json.JSONUtils; import com.fr.stable.StringUtils; import java.util.List; @@ -110,7 +111,7 @@ public class AlphaFineHelper { public static SearchResult getModelListFromJSONArray(String result, String keyword) throws ClassCastException, JSONException { SearchResult allModelList = new SearchResult(); - JSONArray jsonArray = (JSONArray) JSONUtils.jsonDecode(result); + JSONArray jsonArray = JSONFactory.createJSON(JSON.ARRAY, result); for (int i = 0; i < jsonArray.length(); i++) { AlphaFineHelper.checkCancel(); JSONObject jsonObject = jsonArray.optJSONObject(i); @@ -128,11 +129,12 @@ public class AlphaFineHelper { /** * 网络异常时的处理 + * * @param object * @return */ public static SearchResult getNoConnectList(Object object) { - if (isNetworkOk()){ + if (isNetworkOk()) { return null; } SearchResult result = new SearchResult(); @@ -153,9 +155,10 @@ public class AlphaFineHelper { /** * 判断网络是否异常 + * * @return */ - public static boolean isNetworkOk(){ + public static boolean isNetworkOk() { try { HttpToolbox.get(URL_FOR_TEST_NETWORK); return true; diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/HotIssuesManager.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/HotIssuesManager.java index c1dd0ea82..6897689b8 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/HotIssuesManager.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/HotIssuesManager.java @@ -6,8 +6,10 @@ import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.cell.model.RobotModel; import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.general.http.HttpToolbox; +import com.fr.json.JSON; import com.fr.json.JSONArray; import com.fr.json.JSONException; +import com.fr.json.JSONFactory; import com.fr.json.JSONObject; import com.fr.json.JSONUtils; import com.fr.log.FineLoggerFactory; @@ -73,7 +75,7 @@ public class HotIssuesManager { try { String result = HttpToolbox.get(AlphaFineConstants.ALPHA_HOT_SEARCH); - JSONArray jsonArray = (JSONArray)JSONUtils.jsonDecode(result); + JSONArray jsonArray = JSONFactory.createJSON(JSON.ARRAY, result); if(jsonArray != null){ for (int i = 0; i < HOT_ITEM_NUM; i++) { AlphaFineHelper.checkCancel(); From 2422c44a61a12f1cdfc046c6d08a569fa6b4baf9 Mon Sep 17 00:00:00 2001 From: "alex.sung" Date: Fri, 4 Jan 2019 17:31:55 +0800 Subject: [PATCH 04/18] =?UTF-8?q?REPORT-13673=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=8A=A5=E9=94=99=E6=94=B6=E9=9B=86=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=A4=AA=E5=A4=9A=EF=BC=8C=E8=A6=81=E4=B9=88?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E8=B5=B7=E6=9D=A5=E5=8F=91=E9=80=81zip?= =?UTF-8?q?=E5=88=B0=E5=90=8E=E7=AB=AF=EF=BC=8C=E8=A6=81=E4=B9=88=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E5=B0=B1=E6=8B=92=E6=94=B6=E4=BA=86=20200=E6=9D=A1?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=B8=BA1=E4=B8=AA=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=8F=91=E9=80=81=EF=BC=9B=20=E5=8F=91=E9=80=81=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=9C=AC=E5=9C=B0=E7=BC=93=E5=AD=98=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../errorinfo/ErrorInfoUploader.java | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java index 42298b812..fb5c2aeb9 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java @@ -8,6 +8,7 @@ import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.http.HttpResponseType; import com.fr.general.http.HttpToolbox; +import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.license.function.VT4FR; import com.fr.log.FineLoggerFactory; @@ -21,7 +22,9 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * Created by Administrator on 2017/7/24 0024. @@ -35,6 +38,9 @@ public class ErrorInfoUploader { // 在一台不能上网的电脑里发现了10w个errorinfo... private static final int MAX_ERROR_SIZE = 2000; + //单次发送的错误信息最大条数 + private static final int MAX_ITEMS = 200; + static { GeneralContext.addEnvChangedListener(new EnvChangedListener() { @Override @@ -142,21 +148,28 @@ public class ErrorInfoUploader { try { if (ArrayUtils.isNotEmpty(files)) { + JSONArray jsonArray = new JSONArray(); + List tempFiles = new ArrayList<>(); + int count = 0; for (File file : files) { + count++; String filePath = file.getPath(); String suffix = filePath.substring(filePath.lastIndexOf(".")); if (suffix.endsWith(SUFFIX)) { - Thread.sleep(1000L); String content = IOUtils.inputStream2String(new FileInputStream(file)); if (content.length() > MAX_ERROR_SIZE) { CommonIOUtils.deleteFile(file); continue; } - - String url = CloudCenter.getInstance().acquireUrlByKind("design.error"); - if (sendErrorInfo(url, content)) { - CommonIOUtils.deleteFile(file); + jsonArray.put(new JSONObject(content)); + tempFiles.add(file); + if( jsonArray.length() == MAX_ITEMS || count == files.length){ + String url = CloudCenter.getInstance().acquireUrlByKind("design.error"); + if(sendErrorInfo(url, jsonArray)){ + deleteFiles(tempFiles); + } + jsonArray = new JSONArray(); } } } @@ -166,7 +179,13 @@ public class ErrorInfoUploader { } } - private boolean sendErrorInfo(String url, String content) { + private void deleteFiles(List files) { + for(File file : files) { + CommonIOUtils.deleteFile(file); + } + } + + private boolean sendErrorInfo(String url, JSONArray content) { HashMap para = new HashMap<>(); para.put("token", SiteCenterToken.generateToken()); para.put("content", content); From d1620c1355600394bb18cd490ec7c9de4478d15f Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 7 Jan 2019 17:44:55 +0800 Subject: [PATCH 05/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E9=97=AE=E9=A2=984?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/actions/file/PreferencePane.java | 2 ++ .../main/java/com/fr/design/gui/ilable/UILabel.java | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index c6aebd2a2..af6faf568 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -61,6 +61,7 @@ public class PreferencePane extends BasicPane { private static final int CACHING_MAX = 10; private static final int CACHING_DEFAULT = 5; private static final int CACHING_GAP = 5; + private static final int MEMORY_TIP_LABEL_MAX_WIDTH = 230; private static final String TYPE = "pressed"; private static final String DISPLAY_TYPE = "+"; @@ -472,6 +473,7 @@ public class PreferencePane extends BasicPane { JPanel memoryPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Caching_Template")); UILabel memoryLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Max_Caching_Template")); UILabel memoryTipLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Caching_Template_Tip")); + memoryTipLabel.setLineWrapWithMaximumWidth(MEMORY_TIP_LABEL_MAX_WIDTH); memoryTipLabel.setBorder(BorderFactory.createEmptyBorder(0, CACHING_GAP, 0, 0)); cachingTemplateSpinner = new UISpinner(0, CACHING_MAX, 1, CACHING_DEFAULT); JPanel memorySpace = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); diff --git a/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java b/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java index 6583e8d61..aad08d398 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java +++ b/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java @@ -64,6 +64,18 @@ public class UILabel extends JLabel { return preferredSize; } + /** + * 指定最大宽度,文字内容到达最大宽度后,自动换行 + */ + public void setLineWrapWithMaximumWidth(int width) { + String text = this.getText(); + if (StringUtils.isEmpty(text)) { + return; + } + String htmlText = "" + text; + this.setText(htmlText); + } + public static void main(String[] args) { // UILabel label = new UILabel("shishi",SwingConstants.LEFT); From 807f381feda5d4a77dc7757e4b1b08098623ca41 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 7 Jan 2019 19:43:19 +0800 Subject: [PATCH 06/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E9=97=AE=E9=A2=987=20=E6=8E=A7=E4=BB=B6=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/webattr/ToolBarDragPane.java | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/webattr/ToolBarDragPane.java b/designer-realize/src/main/java/com/fr/design/webattr/ToolBarDragPane.java index d339f201a..c420c04b4 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/ToolBarDragPane.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/ToolBarDragPane.java @@ -10,16 +10,26 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.form.ui.Widget; - import com.fr.report.web.Location; import com.fr.report.web.ToolBarManager; import com.fr.stable.ArrayUtils; +import com.fr.stable.GraphDrawHelper; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; -import java.awt.*; +import javax.swing.table.TableColumnModel; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; @@ -34,6 +44,7 @@ import java.awt.image.ImageObserver; public class ToolBarDragPane extends WidgetToolBarPane { private static final int COLUMN = 4; + private static final int MIN_COLUMN_WIDTH = 15; private int row = 7; private DefaultTableModel toolbarButtonTableModel; private JTable layoutTable; @@ -169,10 +180,6 @@ public class ToolBarDragPane extends WidgetToolBarPane { layoutTable.setColumnSelectionAllowed(false); layoutTable.setRowSelectionAllowed(false); layoutTable.setBackground(Color.WHITE); - int columnWidth = Integer.parseInt(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Layout_Table_Column_Width")); - for (int i = 0; i < layoutTable.getColumnModel().getColumnCount(); i++) { - layoutTable.getColumnModel().getColumn(i).setPreferredWidth(columnWidth); - } layoutTable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() > 1 && !(SwingUtilities.isRightMouseButton(e)) && isEnabled) { @@ -188,6 +195,23 @@ public class ToolBarDragPane extends WidgetToolBarPane { }); } + // 根据控件名称长度,设置合适的列宽 + private static void resizeColumnWidth(JTable table) { + final TableColumnModel columnModel = table.getColumnModel(); + for (int column = 0; column < table.getColumnCount(); column++) { + int width = MIN_COLUMN_WIDTH; // Min width + for (int row = 0; row < table.getRowCount(); row++) { + WidgetOption widgetOption = (WidgetOption) table.getValueAt(row, column); + if (widgetOption == null) { + continue; + } + String optionName = widgetOption.optionName(); + width = Math.max(GraphDrawHelper.getWidth(optionName), width); + } + columnModel.getColumn(column).setPreferredWidth(width); + } + } + private boolean isSelectedtable() { for (int i = 0; i < layoutTable.getColumnCount(); i++) { @@ -229,6 +253,7 @@ public class ToolBarDragPane extends WidgetToolBarPane { toolbarButtonTableModel.setValueAt(buttonArray[i], i % row, i / row); } } + resizeColumnWidth(layoutTable); } From b1d5ed6ca38f7f5f14cfcee99703e810f45d2153 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 7 Jan 2019 19:44:23 +0800 Subject: [PATCH 07/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E9=97=AE=E9=A2=988=20=E6=B5=8F=E8=A7=88=E5=99=A8=E8=83=8C?= =?UTF-8?q?=E6=99=AF=EF=BC=8C=E6=A0=87=E7=AD=BE=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 2 +- .../com/fr/design/gui/ilable/UILabel.java | 18 ++++++++++--- .../gradient/GradientBackgroundPane.java | 26 +++++++++---------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index af6faf568..5ddd44b60 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -473,7 +473,7 @@ public class PreferencePane extends BasicPane { JPanel memoryPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Caching_Template")); UILabel memoryLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Max_Caching_Template")); UILabel memoryTipLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Caching_Template_Tip")); - memoryTipLabel.setLineWrapWithMaximumWidth(MEMORY_TIP_LABEL_MAX_WIDTH); + memoryTipLabel.setLineWrap(MEMORY_TIP_LABEL_MAX_WIDTH); memoryTipLabel.setBorder(BorderFactory.createEmptyBorder(0, CACHING_GAP, 0, 0)); cachingTemplateSpinner = new UISpinner(0, CACHING_MAX, 1, CACHING_DEFAULT); JPanel memorySpace = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); diff --git a/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java b/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java index aad08d398..09e7ef0a7 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java +++ b/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java @@ -65,15 +65,25 @@ public class UILabel extends JLabel { } /** - * 指定最大宽度,文字内容到达最大宽度后,自动换行 + * 到达指定宽度后换行 */ - public void setLineWrapWithMaximumWidth(int width) { + public void setLineWrap(int width) { + insertPrefixToText(""); + } + + /** + * 自动换行 + */ + public void setLineWrap() { + insertPrefixToText(""); + } + + private void insertPrefixToText(String prefix) { String text = this.getText(); if (StringUtils.isEmpty(text)) { return; } - String htmlText = "" + text; - this.setText(htmlText); + this.setText(prefix + text); } diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java index 53558f6fb..18c458963 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java +++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java @@ -1,24 +1,22 @@ package com.fr.design.style.background.gradient; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.ButtonGroup; - +import com.fr.base.background.GradientBackground; import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.general.Background; + +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; - -import com.fr.base.background.GradientBackground; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.Background; - -import com.fr.design.style.background.BackgroundDetailPane; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; /** * 渐变色的面板,不是很pp,面板应用显得繁琐,有写可以写成控件类型,比如色彩选择的。。,可以做得花哨点 @@ -44,6 +42,8 @@ public class GradientBackgroundPane extends BackgroundDetailPane { gradientBar = new GradientBar(4, 254); blankJp.add(gradientBar); UILabel jl = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Drag_To_Select_Gradient")); + jl.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20)); + jl.setLineWrap(); jl.setHorizontalAlignment(SwingConstants.CENTER); gradientPanel.add(jl, BorderLayout.NORTH); gradientPanel.add(blankJp, BorderLayout.SOUTH); From 8fdae48117630a2400b8be76a7362fe9e5b4de71 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 7 Jan 2019 19:52:06 +0800 Subject: [PATCH 08/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E9=97=AE=E9=A2=989=E3=80=81=E9=97=AE=E9=A2=9810=20?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/webattr/WebCssPane.java | 1 + .../src/main/java/com/fr/design/webattr/WebJsPane.java | 1 + 2 files changed, 2 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java b/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java index bab14f2d2..6f9866605 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java @@ -46,6 +46,7 @@ public class WebCssPane extends BasicPane { northPane.add(chooseFile, FlowLayout.RIGHT); outnorth.add(northPane,BorderLayout.NORTH); UILabel infor = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CSS_Warning")); + infor.setLineWrap(); infor.setForeground(new Color(207, 42, 39)); outnorth.add(infor,BorderLayout.CENTER); this.add(outnorth, BorderLayout.NORTH); diff --git a/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java b/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java index 4aa4cf6e8..292a9d9ba 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java @@ -96,6 +96,7 @@ public class WebJsPane extends BasicPane { northPane.add(chooseFile); firstnorth.add(northPane,BorderLayout.NORTH); infor1 = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_JS_WARNING1")); + infor1.setLineWrap(); infor1.setForeground(new Color(207, 42, 39)); firstnorth.add(infor1,BorderLayout.CENTER); From 8d9e5fb5fb1eb7fd23c89f896a51adaa6479adfb Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 8 Jan 2019 14:06:39 +0800 Subject: [PATCH 09/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E9=9D=A2=E6=9D=BF=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/report/WriteShortCutsPane.java | 108 ++++++++++-------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java index d9b9741d6..c3105b211 100644 --- a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java @@ -8,14 +8,22 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.ComparatorUtils; - -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class WriteShortCutsPane extends JPanel{ - + private static final int H_GAP = 60; + private static final int V_GAP = 20; + private String nextColString = "Tab"; private String nextRowString = "Enter"; private UILabel nextColHK; @@ -24,9 +32,8 @@ public class WriteShortCutsPane extends JPanel{ private UILabel preRow; public WriteShortCutsPane(){ - this.setLayout(null); - this.add(getFeatureNamePane()); - this.add(getHintsPane()); + this.setLayout(new BorderLayout()); + this.add(createContentPane(), BorderLayout.NORTH); if(!ServerPreferenceConfig.getInstance().isWriteShortCuts()){ nextColString = "Enter"; @@ -34,64 +41,75 @@ public class WriteShortCutsPane extends JPanel{ switchColRow(); } } + + private JPanel createContentPane() { + JPanel contentPane = new JPanel(); + contentPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10)); + + // 纵向布局,横向自适应 + contentPane.setLayout(new GridBagLayout()); + GridBagConstraints cons = new GridBagConstraints(); + cons.fill = GridBagConstraints.HORIZONTAL; + cons.weightx = 1; + cons.gridx = 0; + cons.insets = new Insets(20, 0, 0, 0); + + contentPane.add(getFeatureNamePane(), cons); + contentPane.add(getHintsPane(), cons); + + return contentPane; + } - //todo:布局不要用绝对定位 - public JPanel getFeatureNamePane(){ - JPanel panel1 = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - panel1.setBounds(20, 20, 600, 140); - panel1.setLayout(null); - panel1.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Shortcut_Set"))); + private JPanel getFeatureNamePane(){ + JPanel featureNamePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Shortcut_Set")); + UILabel name = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Feature_Name"), SwingConstants.CENTER); - name.setBounds(40, 30, 80, 50); UILabel nextCol = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Column"), SwingConstants.CENTER); - nextCol.setBounds(140, 30, 180, 50); UILabel nextRow = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Row"), SwingConstants.CENTER); - nextRow.setBounds(390, 30, 180, 50); UILabel shortName = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Current_Keys"), SwingConstants.CENTER); - shortName.setBounds(40, 80, 80, 50); nextColHK = new UILabel(nextColString, SwingConstants.CENTER); - nextColHK.setBounds(140, 80, 180, 50); UIButton switchbt = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/switchShortCuts.png")); switchbt.addActionListener(getListener()); switchbt.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exchange_Key")); - switchbt.setBounds(337, 90, 36, 29); nextRowHK = new UILabel(nextRowString, SwingConstants.CENTER); - nextRowHK.setBounds(390, 80, 180, 50); - - panel1.add(name); - panel1.add(nextCol); - panel1.add(nextRow); - panel1.add(shortName); - panel1.add(nextColHK); - panel1.add(switchbt); - panel1.add(nextRowHK); + + JPanel centerPane = new JPanel(new GridLayout(2, 4, H_GAP, V_GAP)); + centerPane.add(name); + centerPane.add(nextCol); + centerPane.add(new JPanel()); + centerPane.add(nextRow); + centerPane.add(shortName); + centerPane.add(nextColHK); + centerPane.add(switchbt); + centerPane.add(nextRowHK); + + featureNamePane.add(centerPane); - return panel1; + return featureNamePane; } - public JPanel getHintsPane(){ - JPanel panel2 =FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - panel2.setBounds(20, 170, 600, 150); - panel2.setLayout(null); - panel2.setBorder(BorderFactory.createTitledBorder(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"))); + private JPanel getHintsPane(){ + JPanel hintsPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")); + UILabel systemDefault = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_System_Default"), SwingConstants.CENTER); - systemDefault.setBounds(38, 30, 84, 50); UILabel preColText = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Previous_Column"), SwingConstants.CENTER); - preColText.setBounds(140, 30, 190, 50); UILabel preRowText = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Previous_Row"), SwingConstants.CENTER); - preRowText.setBounds(140, 80, 190, 50); preCol = new UILabel("Shift+" + nextColString, SwingConstants.CENTER); - preCol.setBounds(370, 30, 100, 50); preRow = new UILabel("Shift+" + nextRowString, SwingConstants.CENTER); - preRow.setBounds(370, 80, 100, 50); - - panel2.add(systemDefault); - panel2.add(preColText); - panel2.add(preRowText); - panel2.add(preCol); - panel2.add(preRow); + + JPanel centerPane = new JPanel(new GridLayout(2, 3, H_GAP, V_GAP)); + + centerPane.add(systemDefault); + centerPane.add(preColText); + centerPane.add(preCol); + + centerPane.add(new JPanel()); + centerPane.add(preRowText); + centerPane.add(preRow); + + hintsPane.add(centerPane); - return panel2; + return hintsPane; } public ActionListener getListener(){ From 36655594494ba82996959c2b16538c0b72f8ac98 Mon Sep 17 00:00:00 2001 From: plough Date: Tue, 8 Jan 2019 15:13:49 +0800 Subject: [PATCH 10/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E9=9D=A2=E6=9D=BF=E9=87=8D=E6=9E=84=EF=BC=9B=E9=97=AE?= =?UTF-8?q?=E9=A2=9814?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/report/WriteShortCutsPane.java | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java index c3105b211..fa1948e9d 100644 --- a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java @@ -12,6 +12,7 @@ import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.SwingConstants; import java.awt.BorderLayout; +import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; @@ -21,8 +22,8 @@ import java.awt.event.ActionListener; public class WriteShortCutsPane extends JPanel{ - private static final int H_GAP = 60; private static final int V_GAP = 20; + private static final int MAX_LABEL_WIDTH = 100; private String nextColString = "Tab"; private String nextRowString = "Enter"; @@ -62,34 +63,49 @@ public class WriteShortCutsPane extends JPanel{ private JPanel getFeatureNamePane(){ JPanel featureNamePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Shortcut_Set")); + featureNamePane.setLayout(new BorderLayout()); UILabel name = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Feature_Name"), SwingConstants.CENTER); UILabel nextCol = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Column"), SwingConstants.CENTER); UILabel nextRow = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Row"), SwingConstants.CENTER); UILabel shortName = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Current_Keys"), SwingConstants.CENTER); + shortName.setLineWrap(MAX_LABEL_WIDTH); nextColHK = new UILabel(nextColString, SwingConstants.CENTER); - UIButton switchbt = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/switchShortCuts.png")); - switchbt.addActionListener(getListener()); - switchbt.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exchange_Key")); + JPanel switchBtnPane = getSwitchBtnPane(); nextRowHK = new UILabel(nextRowString, SwingConstants.CENTER); - JPanel centerPane = new JPanel(new GridLayout(2, 4, H_GAP, V_GAP)); + JPanel centerPane = new JPanel(new GridLayout(2, 4, 0, 0)); + centerPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); centerPane.add(name); centerPane.add(nextCol); centerPane.add(new JPanel()); centerPane.add(nextRow); centerPane.add(shortName); centerPane.add(nextColHK); - centerPane.add(switchbt); + centerPane.add(switchBtnPane); centerPane.add(nextRowHK); - featureNamePane.add(centerPane); + featureNamePane.add(centerPane, BorderLayout.CENTER); return featureNamePane; } - + + private JPanel getSwitchBtnPane() { + UIButton switchbt = new UIButton(BaseUtils.readIcon("com/fr/design/images/buttonicon/switchShortCuts.png")) { + public Dimension getPreferredSize() { + return new Dimension(40, 30); + } + }; + switchbt.addActionListener(getListener()); + switchbt.setToolTipText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Exchange_Key")); + JPanel switchBtnPane = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane(); + switchBtnPane.add(switchbt); + return switchBtnPane; + } + private JPanel getHintsPane(){ JPanel hintsPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tool_Tips")); + hintsPane.setLayout(new BorderLayout()); UILabel systemDefault = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_System_Default"), SwingConstants.CENTER); UILabel preColText = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Previous_Column"), SwingConstants.CENTER); @@ -97,7 +113,8 @@ public class WriteShortCutsPane extends JPanel{ preCol = new UILabel("Shift+" + nextColString, SwingConstants.CENTER); preRow = new UILabel("Shift+" + nextRowString, SwingConstants.CENTER); - JPanel centerPane = new JPanel(new GridLayout(2, 3, H_GAP, V_GAP)); + JPanel centerPane = new JPanel(new GridLayout(2, 3, 0, V_GAP)); + centerPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 100)); centerPane.add(systemDefault); centerPane.add(preColText); @@ -107,7 +124,7 @@ public class WriteShortCutsPane extends JPanel{ centerPane.add(preRowText); centerPane.add(preRow); - hintsPane.add(centerPane); + hintsPane.add(centerPane, BorderLayout.CENTER); return hintsPane; } From e12025cf6c8beb15a9b4a0d55eb4567e04c38a5b Mon Sep 17 00:00:00 2001 From: plough Date: Thu, 10 Jan 2019 17:08:48 +0800 Subject: [PATCH 11/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>25=20tab=E6=A0=87=E9=A2=98=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/ibutton/UIButton.java | 65 ++++++++++++++++--- .../fr/design/gui/ibutton/UIHeadGroup.java | 17 +++-- 2 files changed, 69 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java index 2af8c8f91..d70f06ea6 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java @@ -6,22 +6,35 @@ import com.fr.base.GraphHelper; import com.fr.design.constants.UIConstants; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; +import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.Constants; import com.fr.stable.StringUtils; -import com.fr.design.utils.gui.GUICoreUtils; -import javax.swing.*; +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.ToolTipManager; import javax.swing.plaf.ButtonUI; -import java.awt.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; +import java.awt.Shape; +import java.awt.Stroke; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.RoundRectangle2D; public class UIButton extends JButton implements UIObserver { + private static final int TOOLTIP_INIT_DELAY = 300; // 延迟 0.3s 显示提示文字 public static final int OTHER_BORDER = 1; public static final int NORMAL_BORDER = 2; - private static final int HEIGH = 20; + private static final int HEIGHT = 20; + private boolean isExtraPainted = true; private boolean isRoundBorder = true; private int rectDirection = Constants.NULL; @@ -36,7 +49,7 @@ public class UIButton extends JButton implements UIObserver { private CellBorderStyle border = null; protected UIObserverListener uiObserverListener; - private static final int TOOLTIP_INIT_DELAY = 300; // 延迟 0.3s 显示提示文字 + private boolean fixedHeight = true; // 是否将按钮的高度固定为 HEIGHT public UIButton() { this(StringUtils.EMPTY); @@ -112,7 +125,7 @@ public class UIButton extends JButton implements UIObserver { public void set4ToolbarButton() { setNormalPainted(false); Dimension dim = getPreferredSize(); - dim.height = HEIGH; + dim.height = HEIGHT; setBackground(null); setOpaque(false); setSize(dim); @@ -170,7 +183,11 @@ public class UIButton extends JButton implements UIObserver { //@Override public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width, 20); + Dimension dim = super.getPreferredSize(); + if (isFixedHeight() || dim.height < HEIGHT) { + dim.height = HEIGHT; + } + return dim; } @@ -323,7 +340,39 @@ public class UIButton extends JButton implements UIObserver { this.isBorderPaintedOnlyWhenPressed = value; } - /** + /** + * 到达指定宽度后换行 + */ + public void setLineWrap(int width) { + insertPrefixToText(""); + } + + /** + * 自动换行 + */ + public void setLineWrap() { + insertPrefixToText(""); + } + + private void insertPrefixToText(String prefix) { + String text = this.getText(); + if (StringUtils.isEmpty(text)) { + return; + } + this.setText(prefix + text); + // 如果文本过长,且允许换行的话,需要放开按钮高度的限制 + this.setFixedHeight(false); + } + + private boolean isFixedHeight() { + return fixedHeight; + } + + private void setFixedHeight(boolean fixedHeight) { + this.fixedHeight = fixedHeight; + } + + /** * 主函数 * @param args 入口参数 */ diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java index c1f5ed24e..c9771b766 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java @@ -4,8 +4,13 @@ import com.fr.base.BaseUtils; import com.fr.design.constants.UIConstants; import com.fr.design.utils.gui.GUICoreUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.Icon; +import javax.swing.JFrame; +import javax.swing.JPanel; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -13,6 +18,7 @@ import java.util.ArrayList; import java.util.List; public class UIHeadGroup extends JPanel { + private static final int MIN_HEIGHT = 25; protected List labelButtonList; private boolean isNeedLeftRightOutLine = true; protected int selectedIndex = -1; @@ -25,7 +31,6 @@ public class UIHeadGroup extends JPanel { labelButtonList = new ArrayList(textArray.length); this.setBackground(UIConstants.TREE_BACKGROUND); this.setLayout(new GridLayout(0, textArray.length, 0, 0)); -// this.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); for (int i = 0; i < textArray.length; i++) { final int index = i; String text = textArray[i]; @@ -50,7 +55,6 @@ public class UIHeadGroup extends JPanel { labelButtonList = new ArrayList(iconArray.length); this.setBackground(UIConstants.NORMAL_BACKGROUND); this.setLayout(new GridLayout(0, iconArray.length, 1, 0)); -// this.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); for (int i = 0; i < iconArray.length; i++) { final int index = i; Icon icon = iconArray[i]; @@ -99,7 +103,9 @@ public class UIHeadGroup extends JPanel { @Override public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); - dim.height = 25; + if (dim.height < MIN_HEIGHT) { + dim.height = MIN_HEIGHT; + } return dim; } @@ -133,6 +139,7 @@ public class UIHeadGroup extends JPanel { labelButton.setRoundBorder(false); labelButton.setBorderPainted(false); labelButton.setPressedPainted(false); + labelButton.setLineWrap(); labelButtonList.add(labelButton); this.add(labelButton); } From aa72b9bca6c9861543f237717980196080ee64fd Mon Sep 17 00:00:00 2001 From: "Mata.Li" Date: Thu, 10 Jan 2019 17:53:00 +0800 Subject: [PATCH 12/18] REPORT-13802 --- .../com/fr/design/insert/formula/variable/cn/contextPath.txt | 2 +- .../com/fr/design/insert/formula/variable/cn/formletName.txt | 2 +- .../com/fr/design/insert/formula/variable/cn/reportName.txt | 2 +- .../com/fr/design/insert/formula/variable/cn/serverName.txt | 2 +- .../com/fr/design/insert/formula/variable/cn/serverSchema.txt | 2 +- .../com/fr/design/insert/formula/variable/cn/serverURL.txt | 2 +- .../com/fr/design/insert/formula/variable/en/contextPath.txt | 2 +- .../com/fr/design/insert/formula/variable/en/formletName.txt | 2 +- .../com/fr/design/insert/formula/variable/en/reportName.txt | 2 +- .../com/fr/design/insert/formula/variable/en/serverName.txt | 2 +- .../com/fr/design/insert/formula/variable/en/serverSchema.txt | 2 +- .../com/fr/design/insert/formula/variable/en/serverURL.txt | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/contextPath.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/contextPath.txt index 2faf5629e..a9a21e7e7 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/contextPath.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/contextPath.txt @@ -1 +1 @@ -contextPath是指绝对路径的服务器别名,即虚拟目录.假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,contextPath是/WebReport \ No newline at end of file +contextPath是指绝对路径的服务器别名,即虚拟目录.假如访问:http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,contextPath是/webroot/decision/view \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/formletName.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/formletName.txt index c9921354a..b6595d02f 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/formletName.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/formletName.txt @@ -1 +1 @@ -表单名字假如访问:http://localhost:8080/WebReport/ReportServer?formlet=Form1.frm,formName就是Form1.frm \ No newline at end of file +表单名字假如访问:http://localhost:8075/webroot/decision/view/form?viewlet=Form1.frm,formName就是Form1.frm \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/reportName.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/reportName.txt index d2bb66ad3..aadcc74d2 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/reportName.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/reportName.txt @@ -1 +1 @@ -报表名字假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,reportName就是WorkBook1.cpt \ No newline at end of file +报表名字假如访问:http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,reportName就是WorkBook1.cpt \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverName.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverName.txt index d6fca7188..4511f6ac8 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverName.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverName.txt @@ -1 +1 @@ -serverName,是指服务器地址或名称.假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverName指的是:localhost,即访问机子的IP \ No newline at end of file +serverName,是指服务器地址或名称.假如访问:http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,serverName指的是:localhost,即访问机子的IP \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverSchema.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverSchema.txt index 15bcc7e9f..b069665a0 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverSchema.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverSchema.txt @@ -1 +1 @@ -serverSchema,是指协议名称.假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverSchema指的是:http \ No newline at end of file +serverSchema,是指协议名称.假如访问:http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,serverSchema指的是:http \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverURL.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverURL.txt index 02c7db49f..cba9e2ebd 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverURL.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/cn/serverURL.txt @@ -1 +1 @@ -serverURL是指访问服务的URL假如访问:http://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverURL就是http://localhost:8080 \ No newline at end of file +serverURL是指访问服务的URL假如访问:http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,serverURL就是http://localhost:8075 \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/contextPath.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/contextPath.txt index 7c6256035..59acbbae2 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/contextPath.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/contextPath.txt @@ -1 +1 @@ -absolute path of the serverhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,contextPath is /WebReport \ No newline at end of file +absolute path of the server http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,contextPath is /webroot/decision/view \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/formletName.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/formletName.txt index 48e90583c..f7a281424 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/formletName.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/formletName.txt @@ -1 +1 @@ -form namehttp://localhost:8080/WebReport/ReportServer?formlet=Form1.frm,formName is Form1.frm \ No newline at end of file +form name http://localhost:8075/webroot/decision/view/form?viewlet=Form1.frm,formName is Form1.frm \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/reportName.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/reportName.txt index 88afaad37..ece7e13d4 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/reportName.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/reportName.txt @@ -1 +1 @@ -report namehttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,reportName is WorkBook1.cpt \ No newline at end of file +report name http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,reportName is WorkBook1.cpt \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverName.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverName.txt index 265bd4ad0..515756dfd 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverName.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverName.txt @@ -1 +1 @@ -address or name of the serverhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverName means localhost \ No newline at end of file +address or name of the server http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,serverName means localhost \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverSchema.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverSchema.txt index 85072e652..f36e3c6e0 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverSchema.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverSchema.txt @@ -1 +1 @@ -serverSchemahttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverSchema is http \ No newline at end of file +serverSchema http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,serverSchema is http \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverURL.txt b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverURL.txt index f14f92583..78bbf7122 100644 --- a/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverURL.txt +++ b/designer-base/src/main/resources/com/fr/design/insert/formula/variable/en/serverURL.txt @@ -1 +1 @@ -URL of the serverhttp://localhost:8080/WebReport/ReportServer?reportlet=WorkBook1.cpt,serverURL is http://localhost:8080 \ No newline at end of file +URL of the server http://localhost:8075/webroot/decision/view/report?viewlet=workbook1.cpt,serverURL is http://localhost:8075 \ No newline at end of file From ba9bc4cf17648077a0f9b021ef8b2c599fd4a9a9 Mon Sep 17 00:00:00 2001 From: Hades Date: Fri, 11 Jan 2019 09:07:35 +0800 Subject: [PATCH 13/18] =?UTF-8?q?REPORT-13544=20=E5=A1=AB=E6=8A=A5?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E8=AE=BE=E7=BD=AE-=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=8C=89=E9=92=AE=E6=9C=89=E7=82=B9=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C9.0=E4=B9=9F=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/webattr/EditToolBar.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java b/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java index 2f2776626..b6683337f 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/EditToolBar.java @@ -513,6 +513,12 @@ public class EditToolBar extends BasicPane { javaScriptPane.setPreferredSize(new Dimension(750, 500)); BasicDialog dialog = javaScriptPane.showWindow(SwingUtilities.getWindowAncestor(ButtonPane.this)); dialog.addDialogActionListener(new DialogActionAdapter() { + + @Override + public void doCancel() { + javaScriptPane.populateBean(((CustomToolBarButton) widget).getJSImpl()); + } + @Override public void doOk() { ((CustomToolBarButton) widget).setJSImpl(javaScriptPane.updateBean()); @@ -619,7 +625,7 @@ public class EditToolBar extends BasicPane { } else if (widget instanceof Submit) { updateSubmit(); } else if (widget instanceof CustomToolBarButton) { - ((CustomToolBarButton) widget).setJSImpl(this.javaScriptPane.updateBean()); + updateCustomToolBarButton(); } else if (widget instanceof Email) { updateEmail(); } @@ -670,6 +676,16 @@ public class EditToolBar extends BasicPane { email.setConsigneeByDepartment(this.consigneeByDepartment.isSelected()); email.setConsigneeByRole(this.consigneeByRole.isSelected()); } + + private void updateCustomToolBarButton() { + CustomToolBarButton customToolBarButton = (CustomToolBarButton) widget; + if (customToolBarButton.getJSImpl() != null) { + customToolBarButton.setJSImpl(this.javaScriptPane.updateBean()); + } else { + customToolBarButton.setJSImpl(JavaScriptActionPane.createDefault().updateBean()); + } + + } } } From a83ec1a9dcbeca420c30098056f095637fe9210a Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 11 Jan 2019 14:13:28 +0800 Subject: [PATCH 14/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>26=20=E4=B8=8B=E6=8B=89=E6=A1=86=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cell/settingpane/CellOtherSetPane.java | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java index 4ac2aab9b..8d80b309d 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java @@ -12,12 +12,12 @@ import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.layout.*; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.JTemplate; import com.fr.general.ComparatorUtils; - import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.CellGUIAttr; @@ -26,10 +26,18 @@ import com.fr.report.cell.cellattr.CellPageAttr; import com.fr.report.elementcase.TemplateElementCase; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JPanel; +import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Insets; +import java.awt.Rectangle; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; @@ -41,8 +49,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane { private static final int HEAD_WDITH = 290; private static final int HEAD_HEIGTH = 24; - private static final Dimension NORMAL_DIMENSION = new Dimension(155, 20); - private static final Dimension SMALL_DIMENSION = new Dimension(150, 20); + private static final int COMBO_WIDTH = 154; // normal private UIButtonGroup autoshrik; @@ -187,28 +194,20 @@ public class CellOtherSetPane extends AbstractCellAttrPane { }; JPanel upPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_LARGE); - double[] downRowSize = {p, p, p, p, p, p}; - double[] downColumnSize = {p, f}; + double[] downRowSize = {p, p, p}; + double[] downColumnSize = {f, COMBO_WIDTH}; int[][] downRowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; - JPanel showContentPane = new JPanel(FRGUIPaneFactory.createRightZeroLayout()); - showContent.setPreferredSize(SMALL_DIMENSION); - showContentPane.add(showContent); fileNamePane.setBorder(BorderFactory.createEmptyBorder(0,12,0,0)); - JPanel tooltipTextFieldPane = new JPanel(FRGUIPaneFactory.createRightZeroLayout()); - tooltipTextField.setPreferredSize(NORMAL_DIMENSION); - tooltipTextFieldPane.add(tooltipTextField); - Component[][] downComponent = new Component[][]{ - new Component[]{null, null}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Content"), SwingConstants.LEFT), showContentPane}, - new Component[]{fileNamePane, null}, - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_ToolTip"), SwingConstants.LEFT), tooltipTextFieldPane}, - new Component[]{null, null}, - new Component[]{null, null}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Content"), SwingConstants.LEFT), showContent}, + new Component[]{fileNamePane, null}, // 选择"用下载连接显示二进制内容"时,会显示这一行的面板 + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_ToolTip"), SwingConstants.LEFT), tooltipTextField} }; JPanel downPane = TableLayoutHelper.createGapTableLayoutPane(downComponent, downRowSize, downColumnSize, downRowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); + downPane.setBorder(BorderFactory.createEmptyBorder(6, 0, 12, 0)); + JPanel pane = new JPanel(new BorderLayout()); pane.add(upPane, BorderLayout.NORTH); pane.add(downPane, BorderLayout.CENTER); From fd7743d45a76c873b6b034c36dd5629570c26dad Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 11 Jan 2019 14:32:14 +0800 Subject: [PATCH 15/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E7=AE=80=E5=8D=95=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cell/settingpane/CellOtherSetPane.java | 72 +++++++++++-------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java index 8d80b309d..487f2babe 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java @@ -84,7 +84,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane { private ValueEditorPane valueEditor; private CardLayout insertRowLayout; private JPanel insertRowPane; - private JPanel southContentPane; + private JPanel insertRowPolicyPane; private JPanel defaultValuePane; /** @@ -136,6 +136,15 @@ public class CellOtherSetPane extends AbstractCellAttrPane { } private JPanel seniorPane() { + initInsertRowPolicyPane(); + JPanel seniorPane = new JPanel(new BorderLayout()); + seniorPane.add(seniorUpPane(), BorderLayout.NORTH); + seniorPane.add(insertRowPolicyPane, BorderLayout.CENTER); + insertRowPolicyPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); + return seniorPane; + } + + private void initInsertRowPolicyPane() { // 插入行策略 insertRowPolicy = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_InsertRow_NULL"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Estate_Default_Text"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_InsertRow_COPY")}); @@ -168,16 +177,40 @@ public class CellOtherSetPane extends AbstractCellAttrPane { new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_InsertRow_Policy"), SwingConstants.LEFT), insertRowPolicy}, new Component[]{null, insertRowPane}, }; - southContentPane = TableLayoutHelper.createGapTableLayoutPane(components1, rowSize1, columnSize1, rowCount1, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); - JPanel seniorPane = new JPanel(new BorderLayout()); - seniorPane.add(seniorUpPane(), BorderLayout.NORTH); - seniorPane.add(southContentPane, BorderLayout.CENTER); - southContentPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); - return seniorPane; + insertRowPolicyPane = TableLayoutHelper.createGapTableLayoutPane(components1, rowSize1, columnSize1, rowCount1, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); } private JPanel seniorUpPane() { + JPanel pane = new JPanel(new BorderLayout()); + // TODO: 方法之间的耦合还比较严重。现在必须先执行 createShowContentPane,再执行 createSeniorCheckPane。否则出现 npe。 + pane.add(createShowContentPane(), BorderLayout.CENTER); + pane.add(createSeniorCheckPane(), BorderLayout.NORTH); + return pane; + } + + private JPanel createShowContentPane() { + double f = TableLayout.FILL; + double p = TableLayout.PREFERRED; + double[] rowSize = {p, p, p}; + double[] colSize = {f, COMBO_WIDTH}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; + JPanel fileNamePane = createNormal(); + fileNamePane.setBorder(BorderFactory.createEmptyBorder(0,12,0,0)); + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Content"), SwingConstants.LEFT), showContent}, + new Component[]{fileNamePane, null}, // 选择"用下载连接显示二进制内容"时,会显示这一行的面板 + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_ToolTip"), SwingConstants.LEFT), tooltipTextField} + }; + + JPanel showContentPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, colSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); + showContentPane.setBorder(BorderFactory.createEmptyBorder(6, 0, 12, 0)); + + return showContentPane; + } + + private JPanel createSeniorCheckPane() { previewCellContent.setBorder(UIConstants.CELL_ATTR_ZEROBORDER); printAndExportContent.setBorder(UIConstants.CELL_ATTR_ZEROBORDER); printAndExportBackground.setBorder(UIConstants.CELL_ATTR_ZEROBORDER); @@ -192,26 +225,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane { new Component[]{printAndExportContent, null}, new Component[]{printAndExportBackground, null}, }; - JPanel upPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_LARGE); - - double[] downRowSize = {p, p, p}; - double[] downColumnSize = {f, COMBO_WIDTH}; - int[][] downRowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; - - fileNamePane.setBorder(BorderFactory.createEmptyBorder(0,12,0,0)); - - Component[][] downComponent = new Component[][]{ - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Content"), SwingConstants.LEFT), showContent}, - new Component[]{fileNamePane, null}, // 选择"用下载连接显示二进制内容"时,会显示这一行的面板 - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_ToolTip"), SwingConstants.LEFT), tooltipTextField} - }; - JPanel downPane = TableLayoutHelper.createGapTableLayoutPane(downComponent, downRowSize, downColumnSize, downRowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); - downPane.setBorder(BorderFactory.createEmptyBorder(6, 0, 12, 0)); - - JPanel pane = new JPanel(new BorderLayout()); - pane.add(upPane, BorderLayout.NORTH); - pane.add(downPane, BorderLayout.CENTER); - return pane; + return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_MEDIUM, LayoutConstants.VGAP_LARGE); } private JPanel pagePane() { @@ -390,10 +404,10 @@ public class CellOtherSetPane extends AbstractCellAttrPane { insertRowLayout.show(insertRowPane, "none"); insertRowPane.setPreferredSize(new Dimension(0, 0)); } - southContentPane.setVisible(true); + insertRowPolicyPane.setVisible(true); JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (!jTemplate.isJWorkBook()) { //表单中报表块编辑屏蔽掉 插入行策略 - southContentPane.setVisible(false); + insertRowPolicyPane.setVisible(false); } } From 68bb1c340c70d67d5913bfdc8156212d2f895da2 Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 11 Jan 2019 14:44:57 +0800 Subject: [PATCH 16/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>26=20=E4=B8=8B=E6=8B=89=E6=A1=86=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E5=85=A8=EF=BC=8C=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/cell/settingpane/CellOtherSetPane.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java index 487f2babe..aa8e72853 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java @@ -198,10 +198,17 @@ public class CellOtherSetPane extends AbstractCellAttrPane { JPanel fileNamePane = createNormal(); fileNamePane.setBorder(BorderFactory.createEmptyBorder(0,12,0,0)); + UILabel showContentLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Content"), SwingConstants.LEFT); + UILabel toolTipLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_ToolTip")); + toolTipLabel.setLineWrap(); + + JPanel toolTipTextFieldWrapper = new JPanel(new BorderLayout()); + toolTipTextFieldWrapper.add(tooltipTextField, BorderLayout.NORTH); + Component[][] components = new Component[][]{ - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Content"), SwingConstants.LEFT), showContent}, + new Component[]{showContentLabel, showContent}, new Component[]{fileNamePane, null}, // 选择"用下载连接显示二进制内容"时,会显示这一行的面板 - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_ToolTip"), SwingConstants.LEFT), tooltipTextField} + new Component[]{toolTipLabel, toolTipTextFieldWrapper} }; JPanel showContentPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, colSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); From 3f62f88bce84c7d73cd0b1a6365b5651c41714ca Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 11 Jan 2019 17:42:54 +0800 Subject: [PATCH 17/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 16 ++- .../fr/design/gui/core/UITextComponent.java | 10 ++ .../com/fr/design/gui/ibutton/UIButton.java | 35 +----- .../fr/design/gui/ibutton/UIHeadGroup.java | 3 +- .../com/fr/design/gui/ilable/UILabel.java | 27 +---- .../gradient/GradientBackgroundPane.java | 3 +- .../com/fr/design/utils/gui/GUICoreUtils.java | 51 ++++++-- .../fr/design/utils/gui/UIComponentUtils.java | 51 ++++++++ .../utils/gui/UIComponentUtilsTest.java | 109 ++++++++++++++++++ .../cell/settingpane/CellOtherSetPane.java | 3 +- .../fr/design/report/WriteShortCutsPane.java | 3 +- .../com/fr/design/webattr/WebCssPane.java | 3 +- .../java/com/fr/design/webattr/WebJsPane.java | 3 +- 13 files changed, 246 insertions(+), 71 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/gui/core/UITextComponent.java create mode 100644 designer-base/src/main/java/com/fr/design/utils/gui/UIComponentUtils.java create mode 100644 designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 5ddd44b60..193a95d3f 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -23,6 +23,7 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; import com.fr.general.Inter; @@ -32,8 +33,17 @@ import com.fr.third.apache.log4j.Level; import com.fr.transaction.Configurations; import com.fr.transaction.Worker; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; @@ -473,7 +483,7 @@ public class PreferencePane extends BasicPane { JPanel memoryPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Caching_Template")); UILabel memoryLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Max_Caching_Template")); UILabel memoryTipLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Caching_Template_Tip")); - memoryTipLabel.setLineWrap(MEMORY_TIP_LABEL_MAX_WIDTH); + UIComponentUtils.setLineWrap(memoryTipLabel, MEMORY_TIP_LABEL_MAX_WIDTH); memoryTipLabel.setBorder(BorderFactory.createEmptyBorder(0, CACHING_GAP, 0, 0)); cachingTemplateSpinner = new UISpinner(0, CACHING_MAX, 1, CACHING_DEFAULT); JPanel memorySpace = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); diff --git a/designer-base/src/main/java/com/fr/design/gui/core/UITextComponent.java b/designer-base/src/main/java/com/fr/design/gui/core/UITextComponent.java new file mode 100644 index 000000000..0cf2e1c3c --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/gui/core/UITextComponent.java @@ -0,0 +1,10 @@ +package com.fr.design.gui.core; + +/** + * 这个接口说明一个基本组件可以设置文本 + * Created by plough on 2019/1/11. + */ +public interface UITextComponent { + String getText(); + void setText(String text); +} diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java index d70f06ea6..078bf692b 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIButton.java @@ -6,6 +6,7 @@ import com.fr.base.GraphHelper; import com.fr.design.constants.UIConstants; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.core.UITextComponent; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.Constants; import com.fr.stable.StringUtils; @@ -28,7 +29,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.RoundRectangle2D; -public class UIButton extends JButton implements UIObserver { +public class UIButton extends JButton implements UIObserver, UITextComponent { private static final int TOOLTIP_INIT_DELAY = 300; // 延迟 0.3s 显示提示文字 public static final int OTHER_BORDER = 1; @@ -49,7 +50,6 @@ public class UIButton extends JButton implements UIObserver { private CellBorderStyle border = null; protected UIObserverListener uiObserverListener; - private boolean fixedHeight = true; // 是否将按钮的高度固定为 HEIGHT public UIButton() { this(StringUtils.EMPTY); @@ -340,36 +340,13 @@ public class UIButton extends JButton implements UIObserver { this.isBorderPaintedOnlyWhenPressed = value; } - /** - * 到达指定宽度后换行 - */ - public void setLineWrap(int width) { - insertPrefixToText(""); - } - - /** - * 自动换行 - */ - public void setLineWrap() { - insertPrefixToText(""); - } - - private void insertPrefixToText(String prefix) { + private boolean isFixedHeight() { String text = this.getText(); if (StringUtils.isEmpty(text)) { - return; + return true; } - this.setText(prefix + text); - // 如果文本过长,且允许换行的话,需要放开按钮高度的限制 - this.setFixedHeight(false); - } - - private boolean isFixedHeight() { - return fixedHeight; - } - - private void setFixedHeight(boolean fixedHeight) { - this.fixedHeight = fixedHeight; + // 如果允许换行,需要放开按钮高度的限制 + return !text.startsWith(""); } /** diff --git a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java index c9771b766..edbc01340 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java +++ b/designer-base/src/main/java/com/fr/design/gui/ibutton/UIHeadGroup.java @@ -3,6 +3,7 @@ package com.fr.design.gui.ibutton; import com.fr.base.BaseUtils; import com.fr.design.constants.UIConstants; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.design.utils.gui.UIComponentUtils; import javax.swing.Icon; import javax.swing.JFrame; @@ -139,7 +140,7 @@ public class UIHeadGroup extends JPanel { labelButton.setRoundBorder(false); labelButton.setBorderPainted(false); labelButton.setPressedPainted(false); - labelButton.setLineWrap(); + UIComponentUtils.setLineWrap(labelButton); labelButtonList.add(labelButton); this.add(labelButton); } diff --git a/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java b/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java index 09e7ef0a7..d6a795275 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java +++ b/designer-base/src/main/java/com/fr/design/gui/ilable/UILabel.java @@ -1,9 +1,9 @@ package com.fr.design.gui.ilable; +import com.fr.design.gui.core.UITextComponent; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.StringUtils; -import com.fr.stable.StringUtils; import javax.swing.Icon; import javax.swing.JFrame; import javax.swing.JLabel; @@ -19,7 +19,7 @@ import java.awt.Dimension; * Date: 13-1-23 * Time: 下午3:15 */ -public class UILabel extends JLabel { +public class UILabel extends JLabel implements UITextComponent { private static final int HTML_SHIFT_HEIGHT = 3; public UILabel(String text, Icon image, int horizontalAlignment) { @@ -64,29 +64,6 @@ public class UILabel extends JLabel { return preferredSize; } - /** - * 到达指定宽度后换行 - */ - public void setLineWrap(int width) { - insertPrefixToText(""); - } - - /** - * 自动换行 - */ - public void setLineWrap() { - insertPrefixToText(""); - } - - private void insertPrefixToText(String prefix) { - String text = this.getText(); - if (StringUtils.isEmpty(text)) { - return; - } - this.setText(prefix + text); - } - - public static void main(String[] args) { // UILabel label = new UILabel("shishi",SwingConstants.LEFT); JFrame frame = new JFrame("Test"); diff --git a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java index 18c458963..a2f6e70d6 100644 --- a/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java +++ b/designer-base/src/main/java/com/fr/design/style/background/gradient/GradientBackgroundPane.java @@ -5,6 +5,7 @@ import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.style.background.BackgroundDetailPane; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.general.Background; import javax.swing.BorderFactory; @@ -43,7 +44,7 @@ public class GradientBackgroundPane extends BackgroundDetailPane { blankJp.add(gradientBar); UILabel jl = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Drag_To_Select_Gradient")); jl.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20)); - jl.setLineWrap(); + UIComponentUtils.setLineWrap(jl); jl.setHorizontalAlignment(SwingConstants.CENTER); gradientPanel.add(jl, BorderLayout.NORTH); gradientPanel.add(blankJp, BorderLayout.SOUTH); diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java index 21af9365d..c8c0561c9 100644 --- a/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/gui/GUICoreUtils.java @@ -6,7 +6,13 @@ package com.fr.design.utils.gui; import com.fr.base.BaseUtils; import com.fr.base.Style; import com.fr.base.background.ColorBackground; -import com.fr.data.util.function.*; +import com.fr.data.util.function.AverageFunction; +import com.fr.data.util.function.CountFunction; +import com.fr.data.util.function.DataFunction; +import com.fr.data.util.function.MaxFunction; +import com.fr.data.util.function.MinFunction; +import com.fr.data.util.function.NoneFunction; +import com.fr.data.util.function.SumFunction; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.core.ActionFactory; import com.fr.design.border.UITitledBorder; @@ -25,20 +31,48 @@ import com.fr.design.style.color.ColorFactory; import com.fr.design.style.color.ColorSelectBox; import com.fr.design.style.color.ColorSelectable; import com.fr.general.FRFont; - import com.fr.stable.Constants; import com.fr.stable.OperatingSystem; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.AbstractButton; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.DefaultListModel; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JFormattedTextField; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JSeparator; +import javax.swing.JSlider; +import javax.swing.JSpinner; +import javax.swing.JTree; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; import javax.swing.event.ChangeListener; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; - -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.Image; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.Window; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; @@ -48,16 +82,17 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public abstract class GUICoreUtils{ +// Noninstantiable utility class +public final class GUICoreUtils { private static final int WINDOW_GAP = 20; private static final int HEIGHT_GAP = 28; private static final int WIN_LOCATION_Y=23; private static final int CASE_FOUR = 4; - - + // 覆盖缺省构造器,不可实例化 private GUICoreUtils() { + throw new AssertionError(); } /** diff --git a/designer-base/src/main/java/com/fr/design/utils/gui/UIComponentUtils.java b/designer-base/src/main/java/com/fr/design/utils/gui/UIComponentUtils.java new file mode 100644 index 000000000..676369e75 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/utils/gui/UIComponentUtils.java @@ -0,0 +1,51 @@ +package com.fr.design.utils.gui; + +import com.fr.design.gui.core.UITextComponent; +import com.fr.stable.StringUtils; + +/** + * 包含 UI 组件相关的工具方法 + * Created by plough on 2019/1/11. + */ + +// Noninstantiable utility class +public class UIComponentUtils { + private static final String HTML_TAG_TPL = ""; + private static final String HTML_BODY_TAG = ""; + private static final String HTML_TAG = ""; + private static final int MIN_WIDTH = 10; + + // 覆盖缺省构造器,不可实例化 + private UIComponentUtils() { + throw new AssertionError(); + } + + /** + * 到达指定宽度后换行 + */ + public static void setLineWrap(UITextComponent comp, int width) { + if (width < MIN_WIDTH) { + width = MIN_WIDTH; + } + insertPrefixToText(comp, String.format(HTML_TAG_TPL, width)); + } + + /** + * 自动换行 + */ + public static void setLineWrap(UITextComponent comp) { + insertPrefixToText(comp, HTML_BODY_TAG); + } + + private static void insertPrefixToText(UITextComponent comp, String prefix) { + if (comp == null) { + return; + } + String text = comp.getText(); + + if (StringUtils.isEmpty(comp.getText()) || text.startsWith(HTML_TAG)) { + return; + } + comp.setText(prefix + comp.getText()); + } +} diff --git a/designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java b/designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java new file mode 100644 index 000000000..256abeeca --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/utils/gui/UIComponentUtilsTest.java @@ -0,0 +1,109 @@ +package com.fr.design.utils.gui; + +import com.fr.design.gui.core.UITextComponent; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.stable.StringUtils; +import org.junit.Before; +import org.junit.Test; + +import javax.swing.Icon; + +import java.awt.Component; +import java.awt.Graphics; + +import static org.junit.Assert.*; + +/** + * Created by plough on 2019/1/11. + */ +public class UIComponentUtilsTest { + private static final String HTML_TAG_TPL = ""; + private static final String HTML_TAG = ""; + private UIButton textButton; + private UIButton emptyTextButton; + private UIButton iconButton; + + private UILabel textLabel; + private UILabel emptyTextLabel; + private UILabel iconLabel; + + @Before + public void setUp() { + textButton = new UIButton("hello"); + emptyTextButton = new UIButton(StringUtils.EMPTY); + iconButton = new UIButton(createMockIcon()); + + textLabel = new UILabel("hello"); + emptyTextLabel = new UILabel(StringUtils.EMPTY); + iconLabel = new UILabel(createMockIcon()); + } + + @Test + public void testSetLineWrap() { + UITextComponent[] noWrapComps = {emptyTextButton, emptyTextLabel, iconButton, iconLabel}; + UITextComponent[] wrapComps = {textLabel, textButton}; + + for (UITextComponent comp : wrapComps) { + UIComponentUtils.setLineWrap(comp); + assertTrue(isLineWrapped(comp)); + } + + for (UITextComponent comp : noWrapComps) { + UIComponentUtils.setLineWrap(comp); + assertFalse(isLineWrapped(comp)); + } + } + + @Test + public void testSetLineWrapWithLineWidth() { + UILabel label1 = new UILabel("l1"); + UILabel label2 = new UILabel("l2"); + UILabel label3 = new UILabel("l3"); + UIComponentUtils.setLineWrap(label1, 50); + assertTrue(isLineWrappedWithLineWidth(label1, 50)); + + UIComponentUtils.setLineWrap(label2, 0); + assertTrue(isLineWrappedWithLineWidth(label2, 10)); + + UIComponentUtils.setLineWrap(label3, -10); + assertTrue(isLineWrappedWithLineWidth(label3, 10)); + } + + @Test + public void testAddHtmlTwice() { + UIComponentUtils.setLineWrap(textLabel, 50); + UIComponentUtils.setLineWrap(textLabel, 20); // 第二次应该不生效 + assertTrue(isLineWrappedWithLineWidth(textLabel, 50)); + } + + private boolean isLineWrapped(UITextComponent comp) { + String text = comp.getText(); + return StringUtils.isNotEmpty(text) && text.startsWith(HTML_TAG); + } + + private boolean isLineWrappedWithLineWidth(UITextComponent comp, int width) { + String text = comp.getText(); + return StringUtils.isNotEmpty(text) && text.startsWith(String.format(HTML_TAG_TPL, width)); + } + + + private Icon createMockIcon() { + return new Icon() { + @Override + public void paintIcon(Component c, Graphics g, int x, int y) { + // do nothing + } + + @Override + public int getIconWidth() { + return 0; + } + + @Override + public int getIconHeight() { + return 0; + } + }; + } +} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java index aa8e72853..b58456be7 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/CellOtherSetPane.java @@ -17,6 +17,7 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.EastRegionContainerPane; import com.fr.design.mainframe.JTemplate; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.general.ComparatorUtils; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; @@ -200,7 +201,7 @@ public class CellOtherSetPane extends AbstractCellAttrPane { UILabel showContentLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Content"), SwingConstants.LEFT); UILabel toolTipLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CellWrite_ToolTip")); - toolTipLabel.setLineWrap(); + UIComponentUtils.setLineWrap(toolTipLabel); JPanel toolTipTextFieldWrapper = new JPanel(new BorderLayout()); toolTipTextFieldWrapper.add(tooltipTextField, BorderLayout.NORTH); diff --git a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java index fa1948e9d..8cf891b92 100644 --- a/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/WriteShortCutsPane.java @@ -6,6 +6,7 @@ import com.fr.config.ServerPreferenceConfig; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.general.ComparatorUtils; import javax.swing.BorderFactory; @@ -69,7 +70,7 @@ public class WriteShortCutsPane extends JPanel{ UILabel nextCol = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Column"), SwingConstants.CENTER); UILabel nextRow = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Cursor_To_Next_Row"), SwingConstants.CENTER); UILabel shortName = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Current_Keys"), SwingConstants.CENTER); - shortName.setLineWrap(MAX_LABEL_WIDTH); + UIComponentUtils.setLineWrap(shortName, MAX_LABEL_WIDTH); nextColHK = new UILabel(nextColString, SwingConstants.CENTER); JPanel switchBtnPane = getSwitchBtnPane(); nextRowHK = new UILabel(nextRowString, SwingConstants.CENTER); diff --git a/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java b/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java index 6f9866605..1f8ba57bb 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/WebCssPane.java @@ -6,6 +6,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.file.FILE; import com.fr.file.FILEChooserPane; import com.fr.file.filter.ChooseFileFilter; @@ -46,7 +47,7 @@ public class WebCssPane extends BasicPane { northPane.add(chooseFile, FlowLayout.RIGHT); outnorth.add(northPane,BorderLayout.NORTH); UILabel infor = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_CSS_Warning")); - infor.setLineWrap(); + UIComponentUtils.setLineWrap(infor); infor.setForeground(new Color(207, 42, 39)); outnorth.add(infor,BorderLayout.CENTER); this.add(outnorth, BorderLayout.NORTH); diff --git a/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java b/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java index 292a9d9ba..4c0505201 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/WebJsPane.java @@ -8,6 +8,7 @@ import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.file.FILE; import com.fr.file.FILEChooserPane; import com.fr.file.filter.ChooseFileFilter; @@ -96,7 +97,7 @@ public class WebJsPane extends BasicPane { northPane.add(chooseFile); firstnorth.add(northPane,BorderLayout.NORTH); infor1 = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_JS_WARNING1")); - infor1.setLineWrap(); + UIComponentUtils.setLineWrap(infor1); infor1.setForeground(new Color(207, 42, 39)); firstnorth.add(infor1,BorderLayout.CENTER); From f5e0713b8bf22b4a633b003a7a63ecb48a10d76f Mon Sep 17 00:00:00 2001 From: plough Date: Fri, 11 Jan 2019 17:50:05 +0800 Subject: [PATCH 18/18] =?UTF-8?q?REPORT-14057=2010.0=E6=97=A5=E6=96=87?= =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= =?UTF-8?q?=3D>28=20checkbox=E6=96=87=E5=AD=97=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/gui/icheckbox/UICheckBox.java | 3 ++- .../com/fr/design/widget/ui/MultiFileEditorPane.java | 10 +++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java b/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java index 825dfc629..7489b4f59 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java +++ b/designer-base/src/main/java/com/fr/design/gui/icheckbox/UICheckBox.java @@ -5,6 +5,7 @@ import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.core.UITextComponent; import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.stable.Constants; import sun.swing.SwingUtilities2; @@ -29,7 +30,7 @@ import java.awt.RenderingHints; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -public class UICheckBox extends JCheckBox implements UIObserver, GlobalNameObserver { +public class UICheckBox extends JCheckBox implements UIObserver, GlobalNameObserver, UITextComponent { private UIObserverListener uiObserverListener; private GlobalNameListener globalNameListener = null; private String checkboxName = ""; diff --git a/designer-realize/src/main/java/com/fr/design/widget/ui/MultiFileEditorPane.java b/designer-realize/src/main/java/com/fr/design/widget/ui/MultiFileEditorPane.java index ca84f5590..8b945f6f8 100644 --- a/designer-realize/src/main/java/com/fr/design/widget/ui/MultiFileEditorPane.java +++ b/designer-realize/src/main/java/com/fr/design/widget/ui/MultiFileEditorPane.java @@ -8,11 +8,14 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.utils.gui.UIComponentUtils; import com.fr.form.ui.MultiFileEditor; - -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; public class MultiFileEditorPane extends FieldEditorDefinePane { private DictionaryComboBox acceptType; @@ -34,6 +37,7 @@ public class MultiFileEditorPane extends FieldEditorDefinePane JPanel contenter = new JPanel(new BorderLayout()); singleFileCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Single_File_Upload")); + UIComponentUtils.setLineWrap(singleFileCheckBox); singleFileCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); acceptType = new DictionaryComboBox(DictionaryConstants.acceptTypes, DictionaryConstants.fileTypeDisplays); // acceptType.setPreferredSize(new Dimension(100, 20));