帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

108 lines
3.8 KiB

/*
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/
package com.fr.design.report;
import com.fr.common.inputevent.InputEventBaseOnOS;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UIBasicSpinner;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.stable.Constants;
import com.fr.stable.GraphDrawHelper;
import com.fr.stable.OperatingSystem;
import com.fr.stable.unit.CM;
import com.fr.stable.unit.INCH;
import com.fr.stable.unit.MM;
import com.fr.stable.unit.UNIT;
import javax.swing.JFormattedTextField;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import java.awt.Dimension;
/**
* UnitFieldPane
*/
public class UnitFieldPane extends JPanel {
private static final int TEXT_FIELD_COLUMNS = 4;
private static final int TEXT_FIELD_COLUMNS_WINDOWS = 6;
private UIBasicSpinner valueSpinner;
private JFormattedTextField textField;
private UnitLabel unitLable;
private int unitType = Constants.UNIT_MM;
public static class UnitLabel extends UILabel {
private int preferredHeight;
public UnitLabel(int unitType, int preferredHeight) {
super();
this.preferredHeight = preferredHeight;
setUnitType(unitType);
}
public void setUnitType(int unitType) {
if (unitType == Constants.UNIT_CM) {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_CM"));
} else if (unitType == Constants.UNIT_INCH) {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_INCH"));
} else {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_MM"));
}
//自适应label宽度
int width = GraphDrawHelper.getWidth(this.getText(), this.getFont());
Dimension unitDimension = new Dimension(width, preferredHeight);
this.setMinimumSize(unitDimension);
this.setMinimumSize(unitDimension);
this.setSize(unitDimension);
this.setPreferredSize(unitDimension);
}
}
public UnitFieldPane(int unitType) {
this.setLayout(FRGUIPaneFactory.createBoxFlowLayout());
this.unitType = unitType;
valueSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, Integer.MIN_VALUE, Double.MAX_VALUE, 1.0));
textField = ((JSpinner.DefaultEditor) valueSpinner.getEditor()).getTextField();
textField.setColumns(OperatingSystem.isWindows() ? TEXT_FIELD_COLUMNS_WINDOWS : TEXT_FIELD_COLUMNS);
InputEventBaseOnOS.addBasicEditInputMap(textField);
this.add(valueSpinner);
unitLable = new UnitLabel(unitType, valueSpinner.getPreferredSize().height);
this.add(unitLable);
}
public JFormattedTextField getTextField() {
return textField;
}
public void setUnitType(int unitType) {
unitLable.setUnitType(unitType);
this.unitType = unitType;
}
public UNIT getUnitValue() {
if (unitType == Constants.UNIT_CM) {
return new CM(((Number) valueSpinner.getValue()).floatValue());
} else if (unitType == Constants.UNIT_INCH) {
return new INCH(((Number) valueSpinner.getValue()).floatValue());
} else {
return new MM(((Number) valueSpinner.getValue()).floatValue());
}
}
public void setUnitValue(UNIT value) {
if (unitType == Constants.UNIT_CM) {
valueSpinner.setValue(new Float(value.toCMValue4Scale2()));
} else if (unitType == Constants.UNIT_INCH) {
valueSpinner.setValue(new Float(value.toINCHValue4Scale3()));
} else {
valueSpinner.setValue(new Float(value.toMMValue4Scale2()));
}
}
}