diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java index b55479dc9a..2196b58eea 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java @@ -347,10 +347,10 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter<Tabl */ private class EffectedRolesChooser extends AbstractCellEditor implements TableCellEditor { - private EffectedRolesComboBox rolesCheckBox; + private UIComboCheckBox rolesCheckBox; EffectedRolesChooser() { - rolesCheckBox = new EffectedRolesComboBox(); + rolesCheckBox = new UIComboCheckBox(roleMap.values().toArray()); this.addCellEditorListener(new CellEditorListener() { @Override public void editingStopped(ChangeEvent e) { @@ -417,28 +417,6 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter<Tabl return rolesCheckBox.getSelectedValues(); } - - private class EffectedRolesComboBox extends UIComboCheckBox { - public EffectedRolesComboBox() { - super(roleMap.values().toArray(), true); - } - @Override - protected void setLayoutAndAddComponents() { - // 使用BorderLayout,否则默认使用的FlowLayout会让整个下拉选框使用最小Size,然后TableCell这边会出现空白 - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - JPanel pane = getClickPane(); - pane.setOpaque(false); - this.add(pane, BorderLayout.CENTER); - } - - @Override - protected void setEditorToolTipText(JComponent editor, String text) { - // 选项过多时,已选中的值会做省略显示处理,此处添加一个Tooltips,显示完整值 - if (text != null) { - editor.setToolTipText(text); - } - } - } } /** diff --git a/designer-base/src/main/java/com/fr/design/gui/icombocheckbox/UIComboCheckBox.java b/designer-base/src/main/java/com/fr/design/gui/icombocheckbox/UIComboCheckBox.java index 400c5594ab..7c710badea 100644 --- a/designer-base/src/main/java/com/fr/design/gui/icombocheckbox/UIComboCheckBox.java +++ b/designer-base/src/main/java/com/fr/design/gui/icombocheckbox/UIComboCheckBox.java @@ -2,8 +2,6 @@ package com.fr.design.gui.icombocheckbox; import com.fine.theme.icon.LazyIcon; import com.fine.theme.light.ui.FineRoundBorder; -import com.fine.theme.utils.FineUIUtils; -import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; import com.fr.design.event.HoverAware; @@ -19,13 +17,13 @@ import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; +import javax.swing.SwingUtilities; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; -import java.awt.FlowLayout; import java.awt.FontMetrics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -39,7 +37,6 @@ import java.util.Map; import static com.fine.theme.utils.FineUIStyle.OFFET_LEFT_TEXT_FIELD; import static com.fine.theme.utils.FineUIStyle.PLAIN_ARROW_BUTTON; -import static com.fine.theme.utils.FineUIStyle.TRANSPARENT_TEXT_FIELD; import static com.fine.theme.utils.FineUIStyle.setStyle; /** @@ -143,7 +140,7 @@ public class UIComboCheckBox extends JComboBox implements UIObserver, GlobalName initClickPane(); setLayoutAndAddComponents(); - setText(); + SwingUtilities.invokeLater(this::setText); addPopupListener(this); } @@ -152,10 +149,12 @@ public class UIComboCheckBox extends JComboBox implements UIObserver, GlobalName * 设置布局管理器并且添加组件 * 默认使用FlowLayout */ - protected void setLayoutAndAddComponents() { - this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - this.add(editor); - this.add(arrowButton); + private void setLayoutAndAddComponents() { + // 使用BorderLayout,否则默认使用的FlowLayout会让整个下拉选框使用最小Size,然后TableCell这边会出现空白 + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel pane = getClickPane(); + pane.setOpaque(false); + this.add(pane, BorderLayout.CENTER); } public UICheckListPopup getPopup() { @@ -341,7 +340,10 @@ public class UIComboCheckBox extends JComboBox implements UIObserver, GlobalName * @param text */ protected void setEditorToolTipText(JComponent editor, String text) { - // 默认不做设置 + // 选项过多时,已选中的值会做省略显示处理,此处添加一个Tooltips,显示完整值 + if (text != null) { + editor.setToolTipText(text); + } } /** @@ -360,6 +362,10 @@ public class UIComboCheckBox extends JComboBox implements UIObserver, GlobalName String omitText = StringUtils.EMPTY; char[] chars = text.toCharArray(); + if (textEditor.getWidth() == 0) { + return text; + } + for (int i = 1; i <= chars.length; i++) { //如果原文本+省略号长度超过文本框 if (fontMetrics.charsWidth(chars, 0, i) + omitLength > textEditor.getWidth()) { @@ -497,26 +503,4 @@ public class UIComboCheckBox extends JComboBox implements UIObserver, GlobalName public String getUIClassID() { return UI_CLASS_ID; } - - /** - * 简单的测试demo - * - * @param args - */ - public static void main(String args[]) { - UIComboCheckBox comboBox = new UIComboCheckBox(new Object[] - {"MATA", "HANA", "KAKA", "KUKA", "INFI", "LILY", "RIBO", "CUBE", "MATA", "HANA", "KAKA", "KUKA"}); - - comboBox.isShowOmitText(false); - comboBox.setPopupMaxDisplayNumber(6); - - JPanel jPanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); - jPanel.add(comboBox); - - JFrame jFrame = new JFrame(); - jFrame.setVisible(true); - jFrame.setSize(600, 400); - jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - jFrame.add(jPanel, BorderLayout.CENTER); - } } diff --git a/designer-base/src/test/java/com/fr/design/gui/storybook/components/ComboCheckBoxStoryBoard.java b/designer-base/src/test/java/com/fr/design/gui/storybook/components/ComboCheckBoxStoryBoard.java index 21a2bc7e28..7b51ff8710 100644 --- a/designer-base/src/test/java/com/fr/design/gui/storybook/components/ComboCheckBoxStoryBoard.java +++ b/designer-base/src/test/java/com/fr/design/gui/storybook/components/ComboCheckBoxStoryBoard.java @@ -3,11 +3,8 @@ package com.fr.design.gui.storybook.components; import com.fr.design.gui.icombocheckbox.UIComboCheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.storybook.StoryBoard; -import com.fr.design.layout.FRGUIPaneFactory; import com.fr.stable.ArrayUtils; -import javax.swing.JPanel; -import java.awt.BorderLayout; import static com.fine.swing.ui.layout.Layouts.cell; import static com.fine.swing.ui.layout.Layouts.flex; @@ -32,15 +29,7 @@ public class ComboCheckBoxStoryBoard extends StoryBoard { } private UIComboCheckBox getComboCheckBox(Object[] array) { - return new UIComboCheckBox(array, true) { - protected void setLayoutAndAddComponents() { - // 使用BorderLayout,否则默认使用的FlowLayout会让整个下拉选框使用最小Size,然后TableCell这边会出现空白 - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - JPanel pane = getClickPane(); - pane.setOpaque(false); - this.add(pane, BorderLayout.CENTER); - } - }; + return new UIComboCheckBox(array, true) {}; } } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java index 75d8058c27..843168091f 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java @@ -17,16 +17,13 @@ import com.fr.design.gui.icombocheckbox.UIComboCheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.FRGUIPaneFactory; import com.fr.report.cell.desensitization.CellDesensitizationBean; import com.fr.stable.StringUtils; import com.fr.third.org.apache.commons.collections4.map.HashedMap; import javax.swing.BorderFactory; -import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.SwingUtilities; -import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.FontMetrics; @@ -288,21 +285,6 @@ public class DesensitizationCellPane extends BasicBeanPane { super(DesensitizationCellPane.this.roleMap.values().toArray(), true); } - @Override - protected void setLayoutAndAddComponents() { - // 使用BorderLayout,否则默认使用的FlowLayout会让整个下拉选框使用最小Size,然后TableCell这边会出现空白 - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - this.add(getClickPane(), BorderLayout.CENTER); - } - - @Override - protected void setEditorToolTipText(JComponent editor, String text) { - // 选项过多时,已选中的值会做省略显示处理,此处添加一个Tooltips,显示完整值 - if (text != null) { - editor.setToolTipText(text); - } - } - @Override protected void setEditorPlaceHolder(UITextField editor) { editor.setPlaceholder(this.getPlaceHolder());