diff --git a/designer-base/src/main/java/com/fr/design/formula/FormulaPaneWhenReserveFormula.java b/designer-base/src/main/java/com/fr/design/formula/FormulaPaneWhenReserveFormula.java index ab49b605d..82efb8cd4 100644 --- a/designer-base/src/main/java/com/fr/design/formula/FormulaPaneWhenReserveFormula.java +++ b/designer-base/src/main/java/com/fr/design/formula/FormulaPaneWhenReserveFormula.java @@ -7,6 +7,11 @@ import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.FontMetrics; /** * @author richie @@ -42,6 +47,7 @@ public class FormulaPaneWhenReserveFormula extends FormulaPane { checkBoxPane.add(reserveCheckBox4Result, BorderLayout.WEST); checkBoxPane.add(reserveCheckBox4Write, BorderLayout.WEST); + calculatePaneHeightWithCount(checkBoxPane); } @Override @@ -60,4 +66,30 @@ public class FormulaPaneWhenReserveFormula extends FormulaPane { } return formula; } + + + /** + * 计算一下公式面板textPane的实际高度 + * 目前已知英文国际化下文本较长,右侧check按钮无法正常展示,实际俄文有可能更长,因此写一个换行规则 + * 不影响中文效果 + * + * @param checkBoxPane textPane + */ + private void calculatePaneHeightWithCount(JPanel checkBoxPane) { + int componentsWidth = 0; + int currentPaneHeight = checkBoxPane.getPreferredSize().height; + int currentPaneWidth = checkBoxPane.getPreferredSize().width; + int hGap = ((FlowLayout) checkBoxPane.getLayout()).getHgap(); + for (Component component : checkBoxPane.getComponents()) { + if(component instanceof UICheckBox) { + Font font = component.getFont(); + FontMetrics fontMetrics = component.getFontMetrics(font); + int width = fontMetrics.stringWidth(((UICheckBox) component).getText()); + componentsWidth += width + hGap; + } + } + int count = (componentsWidth / currentPaneWidth) + 1; + int resultPaneHeight = count * currentPaneHeight; + checkBoxPane.setPreferredSize(new Dimension(currentPaneWidth, resultPaneHeight)); + } } \ No newline at end of file