diff --git a/designer-realize/src/main/java/com/fr/design/actions/columnrow/ColumnRowSizingAction.java b/designer-realize/src/main/java/com/fr/design/actions/columnrow/ColumnRowSizingAction.java index f7e86d2c03..0903323b80 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/columnrow/ColumnRowSizingAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/columnrow/ColumnRowSizingAction.java @@ -13,6 +13,7 @@ import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.fun.ReportLengthUNITProvider; import com.fr.design.unit.UnitConvertUtil; +import com.fr.general.ComparatorUtils; import com.fr.grid.selection.CellSelection; import com.fr.report.elementcase.ElementCase; import com.fr.stable.ArrayUtils; @@ -39,8 +40,8 @@ public abstract class ColumnRowSizingAction extends AbstractColumnRowIndexAction return ColumnRowSizingAction.this.title4UnitInputPane(); } }; - UNIT len = getShowLen(report, cs); - populateNumberDialog(uPane, len); + final UNIT oldLen = getShowLen(report, cs); + populateNumberDialog(uPane, oldLen); final CellSelection finalCS = cs; uPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @@ -51,8 +52,10 @@ public abstract class ColumnRowSizingAction extends AbstractColumnRowIndexAction float newHeight = (float) uPane.update(); int unitType = DesignerEnvManager.getEnvManager().getReportLengthUnit(); ReportLengthUNITProvider lengthUNIT = UnitConvertUtil.parseLengthUNIT(unitType); - UNIT len = lengthUNIT.float2UNIT(newHeight); - updateAction(report, len, finalCS); + UNIT newLen = lengthUNIT.float2UNIT(newHeight); + if (!ComparatorUtils.equals(oldLen, newLen)) { + updateAction(report, newLen, finalCS); + } } catch (ValueNotChangeException e) { // nothing } diff --git a/designer-realize/src/main/java/com/fr/design/report/PageSetupPane.java b/designer-realize/src/main/java/com/fr/design/report/PageSetupPane.java index 20beaa5643..668700a95e 100644 --- a/designer-realize/src/main/java/com/fr/design/report/PageSetupPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/PageSetupPane.java @@ -19,25 +19,20 @@ import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.ButtonGroup; -import javax.swing.Icon; +import javax.swing.*; +import com.fr.design.gui.ispinner.ColumnRowSpinner; import com.fr.page.PaperSettingProvider; import com.fr.page.ReportSettingsProvider; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ilable.UILabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JSpinner; -import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.text.NumberFormatter; import com.fr.base.BaseUtils; import com.fr.base.Margin; @@ -72,6 +67,7 @@ public class PageSetupPane extends BasicPane { private PagePane pagePane; private OtherPane otherPane; private UILabel zeroMarginWarn; + private static final String E = "E"; public PageSetupPane() { this.initComponents(); @@ -212,6 +208,13 @@ public class PageSetupPane extends BasicPane { ((JSpinner.DefaultEditor) paperWidthSpinner.getEditor()).getTextField().setColumns(7); paperHeightSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, 0.0, Double.MAX_VALUE, 1.0)); ((JSpinner.DefaultEditor) paperHeightSpinner.getEditor()).getTextField().setColumns(7); + + JFormattedTextField txt = ((JSpinner.NumberEditor) paperWidthSpinner.getEditor()).getTextField(); + ((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false); + txt = ((JSpinner.NumberEditor) paperHeightSpinner.getEditor()).getTextField(); + ((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false); + + unitLabel = new UnitFieldPane.UnitLabel(Constants.UNIT_MM, paperHeightSpinner.getPreferredSize().height); String[] inch = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_MM"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_INCH")}; @@ -738,8 +741,8 @@ public class PageSetupPane extends BasicPane { return; } // 最大2000,以免画的时候超边 - this.paper_width = Math.min(paper_width, 2000); - this.paper_height = Math.min(paper_height, 2000); + this.paper_width = Math.min(paper_width, Double.MAX_VALUE); + this.paper_height = Math.min(paper_height, Double.MAX_VALUE); this.paper_orientation = paper_orientation; length_scale = !useLocale ? NUM_3 : NUM_POINT_3; } @@ -766,22 +769,28 @@ public class PageSetupPane extends BasicPane { FontMetrics fm = g2d.getFontMetrics(); // 横向的长度 String w_str = "" + paper_width; - if (w_str.indexOf(CoreConstants.DOT) > 0) { + if (!w_str.contains(E) && w_str.indexOf(CoreConstants.DOT) > 0) { w_str = w_str.substring(0, w_str.indexOf(CoreConstants.DOT) + 2); } int w_length = fm.stringWidth(w_str); paint_width = Math.max(paint_width, w_length + 26); // 纵向的长度 String h_str = "" + paper_height; - if (h_str.indexOf(".") > 0) { - h_str = h_str.substring(0, h_str.indexOf(".") + 2); + //使用科学计数法显示长度的时候,限制纵向显示长度为9位 + if (h_str.contains(E)) { + String str1 = h_str.substring(h_str.indexOf(E)); + String str2 = h_str.substring(0, 9 - str1.length()); + h_str = str2 + str1; + } else if (h_str.indexOf(CoreConstants.DOT) > 0) { + h_str = h_str.substring(0, h_str.indexOf(CoreConstants.DOT) + 2); } int h_length = fm.stringWidth(h_str); paint_height = Math.max(paint_height, h_length + 26); + paint_height = Math.min(paint_height, 74); double startX = (pane_width - paint_width) / 2; double startY = (pane_height - paint_height) / 2; g2d.translate(startX, startY); - g2d = getG2d(paint_width, paint_height,g2d,w_str,h_str,w_length,h_length); + g2d = getG2d(paint_width, paint_height, g2d, w_str, h_str, w_length, h_length); if (paper_orientation == ReportConstants.PORTRAIT) { g2d.drawImage(img, (int) ((paint_width - img.getWidth(null)) / 2), (int) ((paint_height - img.getHeight(null)) / 2), null); diff --git a/designer-realize/src/main/java/com/fr/grid/GridUI.java b/designer-realize/src/main/java/com/fr/grid/GridUI.java index ff027af084..62927647aa 100644 --- a/designer-realize/src/main/java/com/fr/grid/GridUI.java +++ b/designer-realize/src/main/java/com/fr/grid/GridUI.java @@ -300,6 +300,8 @@ public class GridUI extends ComponentUI { private int resolution; + private static final double THRESHOLD = 1.0E-4D; + DrawLineHelper(int startIndex, int endIndex, boolean showGridLine, boolean showPaginateLine, DynamicUnitList sizeList, double paperPaintSize, List paginateLineList, int resolution) { @@ -342,7 +344,7 @@ public class GridUI extends ComponentUI { } // paint paper margin line. - if (showPaginateLine && paperSumSize >= paperPaintSize) { + if (showPaginateLine && paperSumSize - paperPaintSize > THRESHOLD) { paginateLineList.add(getPaginateLine2D((int) sumSize)); paperSumSize = tmpSize; } @@ -497,8 +499,8 @@ public class GridUI extends ComponentUI { paintCellElementRectangleList.add(this.tmpRectangle.clone()); - double cellWidth = this.tmpRectangle.getWidth(); - double cellHeight = this.tmpRectangle.getHeight(); + double cellWidth = this.tmpRectangle.getWidth(); + double cellHeight = this.tmpRectangle.getHeight(); // denny_Grid: 画Grid中单元格的内容(包括单元格的背景Content + Background), 不包括边框 painter.paintBackground(g2d, report, tmpCellElement, cellWidth - 1, cellHeight - 1); @@ -625,10 +627,10 @@ public class GridUI extends ComponentUI { tmpLine2D = (Line2D) paginateLineList.get(j);// 直接强制转换,因为List中肯定都是Line2D型的 for (int k = j + 1; k < paginateLineList.size(); k++) { tmpLine2D2 = (Line2D) paginateLineList.get(k); - if (AssistUtils.equals(tmpLine2D2.getX1() ,tmpLine2D.getX1()) - && AssistUtils.equals(tmpLine2D2.getX2() , tmpLine2D.getX2()) - && AssistUtils.equals(tmpLine2D2.getY1() , tmpLine2D.getY1()) - && AssistUtils.equals(tmpLine2D2.getY2() , tmpLine2D.getY2())) { + if (AssistUtils.equals(tmpLine2D2.getX1(), tmpLine2D.getX1()) + && AssistUtils.equals(tmpLine2D2.getX2(), tmpLine2D.getX2()) + && AssistUtils.equals(tmpLine2D2.getY1(), tmpLine2D.getY1()) + && AssistUtils.equals(tmpLine2D2.getY2(), tmpLine2D.getY2())) { paginateLineList.remove(k); } } diff --git a/designer-realize/src/main/java/com/fr/grid/IntelliElements.java b/designer-realize/src/main/java/com/fr/grid/IntelliElements.java index 7c15b8629e..ca1ed55d8a 100644 --- a/designer-realize/src/main/java/com/fr/grid/IntelliElements.java +++ b/designer-realize/src/main/java/com/fr/grid/IntelliElements.java @@ -194,8 +194,12 @@ public class IntelliElements { TemplateCellElement newCellElement = new DefaultTemplateCellElement(colIndex, rowIndex); applyStyle(newCellElement, sourceCellElement);//style if (sourceCellElement.getValue() instanceof DSColumn) { - DSColumn dsColumn = (DSColumn) sourceCellElement.getValue(); - newCellElement.setValue(dsColumn); + try{ + DSColumn dsColumn = (DSColumn)((DSColumn) sourceCellElement.getValue()).clone(); + newCellElement.setValue(dsColumn); + }catch (CloneNotSupportedException e){ + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } newCellElement.setCellExpandAttr(sourceCellElement.getCellExpandAttr()); } else if (sourceCellElement.getValue() instanceof Number) { newCellElement.setValue(processNumber((Number) sourceCellElement.getValue()));