forked from fanruan/design
kuangshuai
3 years ago
27 changed files with 937 additions and 148 deletions
@ -0,0 +1,88 @@ |
|||||||
|
package com.fr.design.gui.style; |
||||||
|
|
||||||
|
import com.fr.base.Style; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.designer.IntervalConstants; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.FRGUIPaneFactory; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.design.mainframe.theme.edit.ui.LabelUtils; |
||||||
|
import com.fr.design.widget.FRWidgetFactory; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.JTextArea; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @author Starryi |
||||||
|
* @version 1.0 |
||||||
|
* Created by Starryi on 2021/9/29 |
||||||
|
*/ |
||||||
|
public class TextFontTippedPane extends AbstractBasicStylePane { |
||||||
|
|
||||||
|
private FRFontPane fontPane; |
||||||
|
|
||||||
|
public TextFontTippedPane(boolean showFormatTip) { |
||||||
|
this.initializePane(showFormatTip); |
||||||
|
} |
||||||
|
|
||||||
|
private void initializePane(boolean showFormatTip) { |
||||||
|
setLayout(new BorderLayout()); |
||||||
|
setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, 0, 0)); |
||||||
|
|
||||||
|
fontPane = new FRFontPane(); |
||||||
|
this.add(createLabeledPane(Toolkit.i18nText("Fine-Design_Form_FR_Font"), fontPane), BorderLayout.NORTH); |
||||||
|
|
||||||
|
if (showFormatTip) { |
||||||
|
JPanel formatTipPane = createFormatTipPane(); |
||||||
|
this.add(formatTipPane, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createLabeledPane(String text, JPanel panel) { |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = { p }; |
||||||
|
double[] columnSize = {p, f}; |
||||||
|
|
||||||
|
UILabel uiLabel = new UILabel(text); |
||||||
|
JPanel uiLabelPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
uiLabelPane.add(uiLabel, BorderLayout.NORTH); |
||||||
|
|
||||||
|
return TableLayoutHelper.createGapTableLayoutPane(new Component[][]{ |
||||||
|
new Component[] { uiLabelPane, panel }, |
||||||
|
}, rowSize, columnSize, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); |
||||||
|
} |
||||||
|
|
||||||
|
private JPanel createFormatTipPane() { |
||||||
|
JPanel container = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||||
|
container.setBorder(BorderFactory.createEmptyBorder(IntervalConstants.INTERVAL_L1, 0, 0, 0)); |
||||||
|
UILabel formatMigratedTip = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Report_Format_Style_Migrated_Tip")); |
||||||
|
formatMigratedTip.setForeground(new Color(153, 153, 153)); |
||||||
|
|
||||||
|
container.add(formatMigratedTip, BorderLayout.NORTH); |
||||||
|
return container; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Report_Text"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void populateBean(Style style) { |
||||||
|
this.fontPane.populateBean(style); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Style update(Style style) { |
||||||
|
return this.fontPane.update(style); |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,485 @@ |
|||||||
|
package com.fr.design.gui.style; |
||||||
|
|
||||||
|
import com.fr.base.CoreDecimalFormat; |
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.base.Style; |
||||||
|
import com.fr.base.TextFormat; |
||||||
|
import com.fr.data.core.FormatField; |
||||||
|
import com.fr.data.core.FormatField.FormatContents; |
||||||
|
import com.fr.design.border.UIRoundedBorder; |
||||||
|
import com.fr.design.constants.LayoutConstants; |
||||||
|
import com.fr.design.constants.UIConstants; |
||||||
|
import com.fr.design.event.GlobalNameListener; |
||||||
|
import com.fr.design.event.GlobalNameObserver; |
||||||
|
import com.fr.design.event.UIObserverListener; |
||||||
|
import com.fr.design.gui.icheckbox.UICheckBox; |
||||||
|
import com.fr.design.gui.icombobox.TextFontComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBox; |
||||||
|
import com.fr.design.gui.icombobox.UIComboBoxRenderer; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.layout.TableLayout; |
||||||
|
import com.fr.design.layout.TableLayoutHelper; |
||||||
|
import com.fr.general.ComparatorUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JLabel; |
||||||
|
import javax.swing.JList; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingConstants; |
||||||
|
import javax.swing.UIManager; |
||||||
|
import javax.swing.border.Border; |
||||||
|
import javax.swing.border.TitledBorder; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.CardLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Component; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FontMetrics; |
||||||
|
import java.awt.Graphics; |
||||||
|
import java.awt.event.ItemEvent; |
||||||
|
import java.awt.event.ItemListener; |
||||||
|
import java.math.RoundingMode; |
||||||
|
import java.text.Format; |
||||||
|
import java.text.SimpleDateFormat; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Starryi |
||||||
|
* @version 1.0 |
||||||
|
* Created by Starryi on 2021/9/29 |
||||||
|
* 包含格式相关的设置 |
||||||
|
*/ |
||||||
|
public class TextFormatPane extends AbstractBasicStylePane implements GlobalNameObserver { |
||||||
|
private static final long serialVersionUID = 724330854437726751L; |
||||||
|
|
||||||
|
private static final int LABEL_X = 4; |
||||||
|
private static final int LABEL_Y = 18; |
||||||
|
private static final int LABEL_DELTA_WIDTH = 8; |
||||||
|
private static final int LABEL_HEIGHT = 15; //标签背景的范围
|
||||||
|
private static final int CURRENCY_FLAG_POINT = 6; |
||||||
|
private static final Border LEFT_BORDER = BorderFactory.createEmptyBorder(0, 30, 0, 0); |
||||||
|
|
||||||
|
private static final Integer[] TYPES = new Integer[]{ |
||||||
|
FormatContents.NULL, FormatContents.NUMBER, |
||||||
|
FormatContents.CURRENCY, FormatContents.PERCENT, |
||||||
|
FormatContents.SCIENTIFIC, FormatContents.DATE, |
||||||
|
FormatContents.TIME, FormatContents.TEXT}; |
||||||
|
|
||||||
|
private static final Integer[] DATE_TYPES = new Integer[]{FormatContents.NULL, FormatContents.DATE, FormatContents.TIME}; |
||||||
|
|
||||||
|
private Format format; |
||||||
|
|
||||||
|
private UIComboBox typeComboBox; |
||||||
|
private TextFontComboBox textField; |
||||||
|
private UILabel sampleLabel; |
||||||
|
private JPanel contentPane; |
||||||
|
private JPanel txtCenterPane; |
||||||
|
private JPanel centerPane; |
||||||
|
private JPanel optionPane; |
||||||
|
private UICheckBox roundingBox; |
||||||
|
private JPanel formatFontPane; |
||||||
|
private boolean isRightFormat; |
||||||
|
private boolean isDate = false; |
||||||
|
private GlobalNameListener globalNameListener = null; |
||||||
|
|
||||||
|
/** |
||||||
|
* Constructor. |
||||||
|
*/ |
||||||
|
public TextFormatPane() { |
||||||
|
this.initComponents(TYPES); |
||||||
|
} |
||||||
|
|
||||||
|
protected UIComboBox getTypeComboBox() { |
||||||
|
return typeComboBox; |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents(Integer[] types) { |
||||||
|
this.setLayout(new BorderLayout(0, 4)); |
||||||
|
initSampleLabel(); |
||||||
|
contentPane = new JPanel(new BorderLayout(0, 4)) { |
||||||
|
@Override |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
return new Dimension(super.getPreferredSize().width, 65); |
||||||
|
} |
||||||
|
}; |
||||||
|
typeComboBox = new UIComboBox(types); |
||||||
|
UIComboBoxRenderer render = createComBoxRender(); |
||||||
|
typeComboBox.setRenderer(render); |
||||||
|
typeComboBox.addItemListener(itemListener); |
||||||
|
typeComboBox.setGlobalName("typeComboBox"); |
||||||
|
contentPane.add(sampleLabel, BorderLayout.NORTH); |
||||||
|
|
||||||
|
txtCenterPane = new JPanel(new BorderLayout()); |
||||||
|
textField = new TextFontComboBox(); |
||||||
|
textField.addItemListener(textFieldItemListener); |
||||||
|
textField.setEditable(true); |
||||||
|
textField.setGlobalName("textField"); |
||||||
|
txtCenterPane.add(textField, BorderLayout.NORTH); |
||||||
|
|
||||||
|
contentPane.add(txtCenterPane, BorderLayout.CENTER); |
||||||
|
|
||||||
|
centerPane = new JPanel(new CardLayout()); |
||||||
|
centerPane.add(new JPanel(), "hide"); |
||||||
|
centerPane.setPreferredSize(new Dimension(0, 0)); |
||||||
|
centerPane.add(contentPane, "show"); |
||||||
|
|
||||||
|
typeComboBox.setPreferredSize(new Dimension(155,20)); |
||||||
|
JPanel typePane = new JPanel(new BorderLayout()); |
||||||
|
typePane.add(typeComboBox, BorderLayout.CENTER); |
||||||
|
typePane.setBorder(LEFT_BORDER); |
||||||
|
// centerPane.setBorder(LEFT_BORDER);
|
||||||
|
|
||||||
|
JPanel option = new JPanel(new BorderLayout()); |
||||||
|
option.add(new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Option"), SwingConstants.LEFT), BorderLayout.WEST); |
||||||
|
roundingBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_Base_Option_Half_Up")); |
||||||
|
roundingBox.setBorder(BorderFactory.createEmptyBorder(0, 40, 0, 0)); |
||||||
|
roundingBox.addItemListener(new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
} |
||||||
|
}); |
||||||
|
roundingBox.setGlobalName("roundingBox"); |
||||||
|
option.add(roundingBox, BorderLayout.CENTER); |
||||||
|
optionPane = new JPanel(new CardLayout()); |
||||||
|
optionPane.add(new JPanel(), "hide"); |
||||||
|
optionPane.setPreferredSize(new Dimension(0, 0)); |
||||||
|
optionPane.add(option, "show"); |
||||||
|
|
||||||
|
Component[][] components = getComponent(centerPane, typePane); |
||||||
|
this.add(createContentPane(components), BorderLayout.CENTER); |
||||||
|
} |
||||||
|
|
||||||
|
protected JPanel createContentPane (Component[][] components) { |
||||||
|
double f = TableLayout.FILL; |
||||||
|
double p = TableLayout.PREFERRED; |
||||||
|
double[] rowSize = {p, p, p, p, p}; |
||||||
|
double[] columnSize = {p, f}; |
||||||
|
int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; |
||||||
|
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_MEDIUM); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected Component[][] getComponent (JPanel centerPane, JPanel typePane) { |
||||||
|
return new Component[][]{ |
||||||
|
new Component[]{null, null}, |
||||||
|
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Report_Base_Format"), SwingConstants.LEFT), typePane}, |
||||||
|
new Component[]{centerPane, null}, |
||||||
|
new Component[]{optionPane, null}, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
protected UIComboBoxRenderer createComBoxRender() { |
||||||
|
return new UIComboBoxRenderer() { |
||||||
|
@Override |
||||||
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||||
|
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||||
|
if (value instanceof Integer) { |
||||||
|
label.setText(" " + FormatField.getInstance().getName((Integer) value)); |
||||||
|
} |
||||||
|
return label; |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
private void initSampleLabel() { |
||||||
|
Border interBorder = new UIRoundedBorder(UIConstants.LINE_COLOR, 1, 4); |
||||||
|
String title = Toolkit.i18nText("Fine-Design_Report_Base_StyleFormat_Sample"); |
||||||
|
Border border = BorderFactory.createTitledBorder(interBorder, title, TitledBorder.LEFT, 0, null, UIConstants.LINE_COLOR); |
||||||
|
sampleLabel = new UILabel(FormatField.getInstance().getFormatValue()) { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void paint(Graphics g) { |
||||||
|
super.paint(g); |
||||||
|
int width = getWidth(); |
||||||
|
Color original = g.getColor(); |
||||||
|
g.setColor(getBackground()); |
||||||
|
g.fillRect(LABEL_X, LABEL_Y, width - LABEL_DELTA_WIDTH, LABEL_HEIGHT); |
||||||
|
g.setColor(UIConstants.LINE_COLOR); |
||||||
|
FontMetrics cellFM = g.getFontMetrics(); |
||||||
|
int textWidth = cellFM.stringWidth(getText()); |
||||||
|
GraphHelper.drawString(g, getText(), (width - textWidth) / 2, 26); |
||||||
|
g.setColor(original); |
||||||
|
} |
||||||
|
}; |
||||||
|
sampleLabel.setHorizontalAlignment(UILabel.CENTER); |
||||||
|
sampleLabel.setBorder(border); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
/** |
||||||
|
* 得到合适的大小 |
||||||
|
*/ |
||||||
|
public Dimension getPreferredSize() { |
||||||
|
if (this.typeComboBox.getSelectedIndex() == FormatContents.NULL) { |
||||||
|
return typeComboBox.getPreferredSize(); |
||||||
|
} |
||||||
|
return super.getPreferredSize(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 弹出框标题 |
||||||
|
* |
||||||
|
* @return 标题 |
||||||
|
*/ |
||||||
|
public String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine-Design_Report_Text"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Populate |
||||||
|
*/ |
||||||
|
public void populateBean(Format format) { |
||||||
|
this.format = format; |
||||||
|
|
||||||
|
if (format == null) { |
||||||
|
this.typeComboBox.setSelectedIndex(FormatContents.NULL); |
||||||
|
} else { |
||||||
|
if (format instanceof CoreDecimalFormat) { |
||||||
|
// check all value
|
||||||
|
String pattern = ((CoreDecimalFormat) format).toPattern(); |
||||||
|
if (isCurrencyFormatStyle(pattern)) { |
||||||
|
setPatternComboBoxAndList(FormatContents.CURRENCY, pattern); |
||||||
|
} else if (pattern.indexOf("%") > 0) { |
||||||
|
setPatternComboBoxAndList(FormatContents.PERCENT, pattern); |
||||||
|
this.roundingBox.setSelected(((CoreDecimalFormat) format).getRoundingMode().equals(RoundingMode.HALF_UP)); |
||||||
|
} else if (pattern.indexOf("E") > 0) { |
||||||
|
setPatternComboBoxAndList(FormatContents.SCIENTIFIC, pattern); |
||||||
|
} else { |
||||||
|
setPatternComboBoxAndList(FormatContents.NUMBER, pattern); |
||||||
|
} |
||||||
|
} else if (format instanceof SimpleDateFormat) { // date and time
|
||||||
|
String pattern = ((SimpleDateFormat) format).toPattern(); |
||||||
|
if (!isTimeType(pattern)) { |
||||||
|
setPatternComboBoxAndList(FormatContents.DATE, pattern); |
||||||
|
} else { |
||||||
|
setPatternComboBoxAndList(FormatContents.TIME, pattern); |
||||||
|
} |
||||||
|
} else if (format instanceof TextFormat) { // Text
|
||||||
|
this.typeComboBox.setSelectedItem(FormatContents.TEXT); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isCurrencyFormatStyle(String pattern) { |
||||||
|
if (pattern.length() == 0) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
if (pattern.charAt(0) == '¤' || pattern.charAt(0) == '$') { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
return pattern.length() > CURRENCY_FLAG_POINT && pattern.startsWith("#,##0;"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 判断是否是数组有模式 |
||||||
|
* |
||||||
|
* @param stringArray 字符串数组 |
||||||
|
* @param pattern 格式 |
||||||
|
* @return 是否是数组有模式 |
||||||
|
*/ |
||||||
|
public static int isArrayContainPattern(String[] stringArray, String pattern) { |
||||||
|
for (int i = 0; i < stringArray.length; i++) { |
||||||
|
if (ComparatorUtils.equals(stringArray[i], pattern)) { |
||||||
|
return i; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
private void setPatternComboBoxAndList(int formatStyle, String pattern) { |
||||||
|
this.typeComboBox.setSelectedItem(formatStyle); |
||||||
|
this.textField.setSelectedItem(pattern); |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isTimeType(String pattern) { |
||||||
|
return pattern.matches(".*[Hhmsa].*"); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* update |
||||||
|
*/ |
||||||
|
public Format update() { |
||||||
|
String patternString = String.valueOf(textField.getSelectedItem()); |
||||||
|
if (getFormatContents() == FormatContents.TEXT) { |
||||||
|
return FormatField.getInstance().getFormat(getFormatContents(), patternString); |
||||||
|
} |
||||||
|
if (isRightFormat) { |
||||||
|
if (StringUtils.isNotEmpty(patternString)) { |
||||||
|
RoundingMode roundingMode = roundingBox.isSelected() ? RoundingMode.HALF_UP : RoundingMode.HALF_EVEN; |
||||||
|
return FormatField.getInstance().getFormat(getFormatContents(), patternString, roundingMode); |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
private int getFormatContents() { |
||||||
|
return (Integer) typeComboBox.getSelectedItem(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Refresh preview label. |
||||||
|
*/ |
||||||
|
private void refreshPreviewLabel() { |
||||||
|
this.sampleLabel.setText(FormatField.getInstance().getFormatValue()); |
||||||
|
this.sampleLabel.setForeground(UIManager.getColor("Label.foreground")); |
||||||
|
try { |
||||||
|
isRightFormat = true; |
||||||
|
if (StringUtils.isEmpty(String.valueOf(textField.getSelectedItem()))) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.sampleLabel.setText(FormatField.getInstance().getFormatValue(getFormatContents(), String.valueOf(textField.getSelectedItem()))); |
||||||
|
} catch (Exception e) { |
||||||
|
this.sampleLabel.setForeground(Color.red); |
||||||
|
this.sampleLabel.setText(e.getMessage()); |
||||||
|
isRightFormat = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isTextOrNull() { |
||||||
|
int contents = getFormatContents(); |
||||||
|
return contents == FormatContents.TEXT || contents == FormatContents.NULL; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Radio selection listener. |
||||||
|
*/ |
||||||
|
ItemListener itemListener = new ItemListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
if (e.getStateChange() == ItemEvent.SELECTED) { |
||||||
|
int contents = getFormatContents(); |
||||||
|
String[] items = FormatField.getInstance().getFormatArray(contents, false); |
||||||
|
CardLayout cardLayout = (CardLayout) centerPane.getLayout(); |
||||||
|
|
||||||
|
if (isTextOrNull()) { |
||||||
|
centerPane.setPreferredSize(new Dimension(0, 0)); |
||||||
|
cardLayout.show(centerPane, "hide"); |
||||||
|
} else { |
||||||
|
textField.removeAllItems(); |
||||||
|
textField.setItemArray(items); |
||||||
|
textField.setSelectedIndex(0); |
||||||
|
centerPane.setPreferredSize(new Dimension(270, 65)); |
||||||
|
cardLayout.show(centerPane, "show"); |
||||||
|
} |
||||||
|
CardLayout optionLayout = ((CardLayout) optionPane.getLayout()); |
||||||
|
if (getFormatContents() == FormatContents.PERCENT) { |
||||||
|
optionPane.setPreferredSize(new Dimension(100, 20)); |
||||||
|
optionLayout.show(optionPane, "show"); |
||||||
|
} else { |
||||||
|
optionPane.setPreferredSize(new Dimension(0, 0)); |
||||||
|
optionLayout.show(optionPane, "hide"); |
||||||
|
roundingBox.setSelected(false); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
ItemListener textFieldItemListener = new ItemListener() { |
||||||
|
@Override |
||||||
|
public void itemStateChanged(ItemEvent e) { |
||||||
|
if (e.getStateChange() == ItemEvent.SELECTED) { |
||||||
|
refreshPreviewLabel(); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
@Override |
||||||
|
/** |
||||||
|
* populate |
||||||
|
*/ |
||||||
|
public void populateBean(Style style) { |
||||||
|
this.populateBean(style.getFormat()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
/** |
||||||
|
* update |
||||||
|
*/ |
||||||
|
public Style update(Style style) { |
||||||
|
if (ComparatorUtils.equals(globalNameListener.getGlobalName(), "textField") |
||||||
|
|| ComparatorUtils.equals(globalNameListener.getGlobalName(), "typeComboBox") |
||||||
|
|| ComparatorUtils.equals(globalNameListener.getGlobalName(), "roundingBox")) { |
||||||
|
return style.deriveFormat(this.update()); |
||||||
|
} |
||||||
|
return style; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 默认只显示百分比的编辑下拉. |
||||||
|
*/ |
||||||
|
public void justUsePercentFormat() { |
||||||
|
typeComboBox.setEnabled(false); |
||||||
|
this.typeComboBox.setSelectedItem(FormatContents.PERCENT); |
||||||
|
} |
||||||
|
|
||||||
|
public void setForDataSheet() { |
||||||
|
Integer[] otherTypes = new Integer[]{FormatContents.NULL, FormatContents.NUMBER, FormatContents.CURRENCY, FormatContents.PERCENT, FormatContents.SCIENTIFIC,}; |
||||||
|
this.typeComboBox = new UIComboBox(otherTypes); |
||||||
|
UIComboBoxRenderer render = new UIComboBoxRenderer() { |
||||||
|
@Override |
||||||
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
||||||
|
JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
||||||
|
if (value instanceof Integer) { |
||||||
|
label.setText(" " + FormatField.getInstance().getName((Integer) value)); |
||||||
|
} |
||||||
|
return label; |
||||||
|
} |
||||||
|
}; |
||||||
|
typeComboBox.setRenderer(render); |
||||||
|
typeComboBox.addItemListener(itemListener); |
||||||
|
setTypeComboBoxPane(typeComboBox); |
||||||
|
} |
||||||
|
|
||||||
|
protected void setTypeComboBoxPane (UIComboBox typeComboBox) { |
||||||
|
this.add(typeComboBox, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
|
||||||
|
public void setComboBoxModel(boolean isDate) { |
||||||
|
if (this.isDate != isDate) { |
||||||
|
this.isDate = isDate; |
||||||
|
this.typeComboBox.setSelectedIndex(0); |
||||||
|
if (isDate) { |
||||||
|
for (int i = 0; i < DATE_TYPES.length; i++) { |
||||||
|
this.typeComboBox.addItem(DATE_TYPES[i]); |
||||||
|
} |
||||||
|
for (int i = 0; i < TYPES.length; i++) { |
||||||
|
this.typeComboBox.removeItemAt(1); |
||||||
|
} |
||||||
|
} else { |
||||||
|
for (int i = 0; i < TYPES.length; i++) { |
||||||
|
this.typeComboBox.addItem(TYPES[i]); |
||||||
|
} |
||||||
|
for (int i = 0; i < DATE_TYPES.length; i++) { |
||||||
|
this.typeComboBox.removeItemAt(1); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void registerNameListener(GlobalNameListener listener) { |
||||||
|
globalNameListener = listener; |
||||||
|
} |
||||||
|
|
||||||
|
public void registerChangeListener(UIObserverListener listener) { |
||||||
|
typeComboBox.registerChangeListener(listener); |
||||||
|
textField.registerChangeListener(listener); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean shouldResponseNameListener() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setGlobalName(String name) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue