Browse Source

Merge pull request #16273 in DESIGN/design from fbp/feature to fbp/research

* commit '7546a95f23a0f0623c2e65faad29e0278be6493f':
  REPORT-146903 fix:UIComboCheckBox 组件问题修复
  REPORT-140603 fix: 新建文件夹弹窗缩放适配
fbp/research
superman 2 weeks ago
parent
commit
9f15673692
  1. 26
      designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java
  2. 48
      designer-base/src/main/java/com/fr/design/gui/icombocheckbox/UIComboCheckBox.java
  3. 13
      designer-base/src/test/java/com/fr/design/gui/storybook/components/ComboCheckBoxStoryBoard.java
  4. 18
      designer-realize/src/main/java/com/fr/design/mainframe/cell/settingpane/desensitization/model/DesensitizationCellPane.java

26
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);
}
}
}
}
/**

48
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);
}
}

13
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) {};
}
}

18
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());

Loading…
Cancel
Save