帆软报表设计器源代码。
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.
 
 
 
 

208 lines
7.8 KiB

package com.fr.design.style;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;
import java.text.Format;
import java.text.SimpleDateFormat;
import com.fr.design.gui.ilable.UILabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import com.fr.base.TextFormat;
import com.fr.data.core.FormatField;
import com.fr.data.core.FormatField.FormatContents;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.style.FormatPane;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.dialog.BasicPane;
/**
* @author kunsnat E-mail:kunsnat@gmail.com
* @version 创建时间:2011-11-4 上午11:05:32
* 类说明: 数字格式的UIComboBox界面. 原型图参考bug5471效果3
*
* @<a> 有可能只需要百分比(饼图的百分比格式设置)
*/
public class FormatBox extends BasicPane {
private static final long serialVersionUID = -8728652510003088618L;
private static final double DOUBLE_VALUE = 12345.6789;
private UIComboBox typeBox;
private UIComboBox formatBox;
private JTextField formatField;
private UILabel previewLabel;
public FormatBox() {
this.setLayout(FRGUIPaneFactory.createBorderLayout());
JPanel pane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane();
this.add(pane, BorderLayout.NORTH);
pane.add(typeBox = new UIComboBox());
typeBox.setPreferredSize(new Dimension(80, 20));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.NULL));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.NUMBER));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.CURRENCY));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.PERCENT));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.SCIENTIFIC));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.DATE));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.TIME));
typeBox.addItem(FormatField.getInstance().getName(FormatContents.TEXT));
pane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Format") + ":"));
formatBox = new UIComboBox();
// kunsnat: 大小: 这个有的格式的大小需要很宽!
formatBox.setPreferredSize(new Dimension(150, 20));
formatBox.setEditable(false);
formatBox.setEnabled(false);
pane.add(formatBox);
pane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_StyleFormat_Sample") + ":"));
pane.add(previewLabel = new UILabel(""));
typeBox.addItemListener(typeListener);
formatBox.addItemListener(formatListener);
formatField = (JTextField)formatBox.getEditor().getEditorComponent();
formatField.getDocument().addDocumentListener(new DocumentListener() {
public void removeUpdate(DocumentEvent e) {
refreshLabelText();
}
public void insertUpdate(DocumentEvent e) {
refreshLabelText();
}
public void changedUpdate(DocumentEvent e) {
refreshLabelText();
}
});
}
public void setDateTypeBox() {
typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.DATE));
formatBox.setSelectedItem(new SimpleDateFormat("yyyy-MM-dd").toPattern());
}
public void setTextTypeBox() {
typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.NULL));
}
ItemListener typeListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Object selectObject = ((UIComboBox)e.getSource()).getSelectedItem();
formatBox.removeAllItems();
int contents = FormatField.getInstance().getContents(selectObject);
formatBox.setEditable((contents != FormatContents.NULL) && (contents != FormatContents.TEXT));
formatBox.setEnabled((contents != FormatContents.NULL) && (contents != FormatContents.TEXT));
addItem2Box(formatBox, FormatField.getInstance().getFormatArray(contents));
}
};
ItemListener formatListener = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
if(formatBox != null && formatBox.getSelectedItem() != null) {
resetLabelText();
}
}
};
public void populate(Format format) {
if (format == null) {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.NULL));
} else {
if (format instanceof DecimalFormat) {
String pattern = ((DecimalFormat) format).toPattern();
if (isMoneyPattern(pattern)) {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.CURRENCY));
this.formatBox.setSelectedItem(pattern);
} else if (pattern.endsWith("%")) {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.PERCENT));
this.formatBox.setSelectedItem(pattern);
} else if (pattern.indexOf("E") > 0) {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.SCIENTIFIC));
this.formatBox.setSelectedItem(pattern);
} else {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.NUMBER));
this.formatBox.setSelectedItem(pattern);
}
} else if (format instanceof SimpleDateFormat) { //date and time
String pattern = ((SimpleDateFormat) format).toPattern();
int index = FormatPane.isArrayContainPattern(FormatField.getInstance().getFormatArray(FormatContents.DATE), pattern);
if (index != -1) {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.DATE));
this.formatBox.setSelectedItem(pattern);
} else {
index = FormatPane.isArrayContainPattern(FormatField.getInstance().getFormatArray(FormatContents.TIME), pattern);
if (index != -1) {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.TIME));
this.formatBox.setSelectedItem(pattern);
}
}
if (index == -1) {
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.DATE));
this.formatBox.setSelectedItem(pattern);
}
} else if (format instanceof TextFormat) { //Text
this.typeBox.setSelectedItem(FormatField.getInstance().getName(FormatContents.TEXT));
}
}
resetLabelText();
}
public Format update() {
FormatField field = FormatField.getInstance();
int contents = field.getContents(typeBox.getSelectedItem());
return field.getFormat(contents, formatField.getText());
}
@Override
protected String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Style");
}
private void refreshLabelText() {
this.previewLabel.setForeground(UIManager.getColor("Label.foreground"));
try{
resetLabelText();
} catch (Exception e) {
this.previewLabel.setForeground(Color.red);
this.previewLabel.setText(e.getMessage());
}
}
private void resetLabelText() {
FormatField field = FormatField.getInstance();
int contents = field.getContents(typeBox.getSelectedItem());
Format format = field.getFormat(contents, formatField.getText());
if(format != null) {
this.previewLabel.setText(format.format(DOUBLE_VALUE));
} else {
this.previewLabel.setText("" + DOUBLE_VALUE);
}
}
private void addItem2Box(UIComboBox box, Object[] object) {
for(int i = 0; i < object.length; i++) {
box.addItem(object[i]);
}
}
private boolean isMoneyPattern(String pattern) {
return (pattern.length() > 0 && pattern.charAt(0) == '¤') || (pattern.length() > 0 && pattern.charAt(0) == '$');
}
}