diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportResultDataSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportResultDataSeriesPane.java index 240905c65e..347d150f98 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportResultDataSeriesPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/report/BoxPlotReportResultDataSeriesPane.java @@ -20,11 +20,12 @@ public class BoxPlotReportResultDataSeriesPane extends AbstractReportDataContent private TinyFormulaPane category; private TinyFormulaPane seriesName; - private TinyFormulaPane max; - private TinyFormulaPane q3; - private TinyFormulaPane median; - private TinyFormulaPane q1; - private TinyFormulaPane min; + + private TinyFormulaWithEditLabel max; + private TinyFormulaWithEditLabel q3; + private TinyFormulaWithEditLabel median; + private TinyFormulaWithEditLabel q1; + private TinyFormulaWithEditLabel min; public BoxPlotReportResultDataSeriesPane() { this.setLayout(new BorderLayout()); @@ -42,11 +43,12 @@ public class BoxPlotReportResultDataSeriesPane extends AbstractReportDataContent category = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Category")); seriesName = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Series_Name")); - max = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Data_Max")); - q3 = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Data_Q3")); - median = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Data_Median")); - q1 = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Data_Q1")); - min = createTinyFormulaPaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Data_Min")); + + max = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Max")); + q3 = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q3")); + median = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Median")); + q1 = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q1")); + min = createTinyFormulaWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Min")); } private JPanel createContentPane() { @@ -85,6 +87,25 @@ public class BoxPlotReportResultDataSeriesPane extends AbstractReportDataContent }; } + private TinyFormulaWithEditLabel createTinyFormulaWithEditLabel(String title) { + + return new TinyFormulaWithEditLabel(title) { + protected void clearAllBackground() { + clearAllLabelBackground(); + } + }; + } + + private void clearAllLabelBackground() { + TinyFormulaWithEditLabel[] editLabels = new TinyFormulaWithEditLabel[]{max, q3, median, q1, min}; + + for (TinyFormulaWithEditLabel label : editLabels) { + if (label != null) { + label.clearBackGround(); + } + } + } + public void populateBean(ChartCollection ob) { VanBoxReportResultDefinition detailedDefinition = BoxReportDefinitionHelper.getBoxReportResultDefinition(ob); @@ -94,11 +115,18 @@ public class BoxPlotReportResultDataSeriesPane extends AbstractReportDataContent populateFormulaPane(category, detailedDefinition.getCategoryName()); populateFormulaPane(seriesName, detailedDefinition.getSeriesName()); - populateFormulaPane(max, detailedDefinition.getMax()); - populateFormulaPane(q3, detailedDefinition.getQ3()); - populateFormulaPane(median, detailedDefinition.getMedian()); - populateFormulaPane(q1, detailedDefinition.getQ1()); - populateFormulaPane(min, detailedDefinition.getMin()); + + max.setHeaderName(detailedDefinition.getMaxLabel()); + q3.setHeaderName(detailedDefinition.getQ3Label()); + median.setHeaderName(detailedDefinition.getMedianLabel()); + q1.setHeaderName(detailedDefinition.getQ1Label()); + min.setHeaderName(detailedDefinition.getMinLabel()); + + max.populateFormula(detailedDefinition.getMax()); + q3.populateFormula(detailedDefinition.getQ3()); + median.populateFormula(detailedDefinition.getMedian()); + q1.populateFormula(detailedDefinition.getQ1()); + min.populateFormula(detailedDefinition.getMin()); } private void populateFormulaPane(TinyFormulaPane pane, Object ob) { @@ -118,11 +146,18 @@ public class BoxPlotReportResultDataSeriesPane extends AbstractReportDataContent resultDefinition.setCategoryName(canBeFormula(category.getUITextField().getText())); resultDefinition.setSeriesName(canBeFormula(seriesName.getUITextField().getText())); - resultDefinition.setMax(canBeFormula(max.getUITextField().getText())); - resultDefinition.setQ3(canBeFormula(q3.getUITextField().getText())); - resultDefinition.setMedian(canBeFormula(median.getUITextField().getText())); - resultDefinition.setQ1(canBeFormula(q1.getUITextField().getText())); - resultDefinition.setMin(canBeFormula(min.getUITextField().getText())); + + resultDefinition.setMaxLabel(max.getHeaderName()); + resultDefinition.setQ3Label(q3.getHeaderName()); + resultDefinition.setMedianLabel(median.getHeaderName()); + resultDefinition.setQ1Label(q1.getHeaderName()); + resultDefinition.setMinLabel(min.getHeaderName()); + + resultDefinition.setMax(canBeFormula(max.updateFormula())); + resultDefinition.setQ3(canBeFormula(q3.updateFormula())); + resultDefinition.setMedian(canBeFormula(median.updateFormula())); + resultDefinition.setQ1(canBeFormula(q1.updateFormula())); + resultDefinition.setMin(canBeFormula(min.updateFormula())); report.setResultDefinition(resultDefinition); } diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/report/TinyFormulaWithEditLabel.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/report/TinyFormulaWithEditLabel.java new file mode 100644 index 0000000000..2c99230e3b --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/report/TinyFormulaWithEditLabel.java @@ -0,0 +1,71 @@ +package com.fr.van.chart.box.data.report; + +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; +import com.fr.design.formula.TinyFormulaPane; +import com.fr.design.mainframe.chart.gui.UIEditLabel; + +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Dimension; + +public abstract class TinyFormulaWithEditLabel extends JPanel implements UIObserver { + + private UIEditLabel editLabel; + private TinyFormulaPane tinyFormulaPane; + + protected UIObserverListener listener; + + public TinyFormulaWithEditLabel(String text) { + editLabel = new UIEditLabel(text, SwingConstants.LEFT) { + protected void doAfterMousePress() { + clearAllBackground(); + } + + protected boolean appendOriginalLabel() { + return false; + } + }; + + editLabel.setPreferredSize(new Dimension(75, 20)); + tinyFormulaPane = new TinyFormulaPane(); + + this.setLayout(new BorderLayout(4, 0)); + this.add(editLabel, BorderLayout.WEST); + this.add(tinyFormulaPane, BorderLayout.CENTER); + } + + protected abstract void clearAllBackground(); + + public void clearBackGround() { + editLabel.resetNomalrBackground(); + } + + public boolean shouldResponseChangeListener() { + return true; + } + + public void registerChangeListener(UIObserverListener listener) { + this.listener = listener; + editLabel.registerChangeListener(listener); + } + + public void populateFormula(Object ob) { + if (ob != null) { + tinyFormulaPane.populateBean(ob.toString()); + } + } + + public Object updateFormula() { + return tinyFormulaPane.getUITextField().getText(); + } + + public String getHeaderName() { + return editLabel.getText(); + } + + public void setHeaderName(String text) { + editLabel.setText(text); + } +} diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java index ff5391d111..a9813f2d39 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/BoxPlotTableResultDataSeriesPane.java @@ -6,12 +6,12 @@ import com.fr.design.gui.icombobox.UIComboBox; 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.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; import com.fr.plugin.chart.box.data.VanBoxTableDefinition; import com.fr.plugin.chart.box.data.VanBoxTableResultDefinition; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; -import com.fr.van.chart.designer.TableLayout4VanChartHelper; import javax.swing.BorderFactory; import javax.swing.JPanel; @@ -24,11 +24,15 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa private UIComboBox category; private UIComboBox seriesName; - private UIComboBox max; - private UIComboBox q3; - private UIComboBox median; - private UIComboBox q1; - private UIComboBox min; + + private JPanel categoryPane; + private JPanel seriesNamePane; + + private UIComboBoxWithEditLabel max; + private UIComboBoxWithEditLabel q3; + private UIComboBoxWithEditLabel median; + private UIComboBoxWithEditLabel q1; + private UIComboBoxWithEditLabel min; public BoxPlotTableResultDataSeriesPane() { @@ -41,23 +45,49 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa } private void initComboxSize() { - Dimension preferredSize = new Dimension(100, 20); - category = new UIComboBox(); seriesName = new UIComboBox(); - max = new UIComboBox(); - q3 = new UIComboBox(); - median = new UIComboBox(); - q1 = new UIComboBox(); - min = new UIComboBox(); - - category.setPreferredSize(preferredSize); - seriesName.setPreferredSize(preferredSize); - max.setPreferredSize(preferredSize); - q3.setPreferredSize(preferredSize); - median.setPreferredSize(preferredSize); - q1.setPreferredSize(preferredSize); - min.setPreferredSize(preferredSize); + + categoryPane = createUIComboBoxPane(category, Toolkit.i18nText("Fine-Design_Chart_Category")); + seriesNamePane = createUIComboBoxPane(seriesName, Toolkit.i18nText("Fine-Design_Chart_Series_Name")); + + max = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Max")); + q3 = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q3")); + median = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Median")); + q1 = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q1")); + min = createUIComboBoxWithEditLabel(Toolkit.i18nText("Fine-Design_Chart_Data_Min")); + } + + private JPanel createUIComboBoxPane(UIComboBox comboBox, String title) { + UILabel label = new UILabel(title); + label.setPreferredSize(new Dimension(75, 20)); + + JPanel panel = new JPanel(); + + panel.setLayout(new BorderLayout(4, 0)); + panel.add(label, BorderLayout.WEST); + panel.add(comboBox, BorderLayout.CENTER); + + return panel; + } + + private UIComboBoxWithEditLabel createUIComboBoxWithEditLabel(String title) { + + return new UIComboBoxWithEditLabel(title) { + protected void clearAllBackground() { + clearAllLabelBackground(); + } + }; + } + + private void clearAllLabelBackground() { + UIComboBoxWithEditLabel[] editLabels = new UIComboBoxWithEditLabel[]{max, q3, median, q1, min}; + + for (UIComboBoxWithEditLabel label : editLabels) { + if (label != null) { + label.clearBackGround(); + } + } } private void addItemListener() { @@ -73,24 +103,23 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa private JPanel createDataSeriesPane() { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; - - double[] column = {f, COMPONENT_WIDTH}; double[] row = {p, p, p, p, p, p, p}; - - Component[][] components_north = new Component[][]{ - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Category")), category}, - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Series_Name")), seriesName}, - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Max")), max}, - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q3")), q3}, - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Median")), median}, - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Q1")), q1}, - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Data_Min")), min}, + double[] col = {f}; + + Component[][] components = new Component[][]{ + new Component[]{categoryPane}, + new Component[]{seriesNamePane}, + new Component[]{max}, + new Component[]{q3}, + new Component[]{median}, + new Component[]{q1}, + new Component[]{min} }; - JPanel center = TableLayout4VanChartHelper.createGapTableLayoutPane(components_north, row, column); - center.setBorder(BorderFactory.createEmptyBorder(10, 24, 10, 15)); + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, row, col); + panel.setBorder(BorderFactory.createEmptyBorder(0, 24, 0, 15)); - return center; + return panel; } public void checkBoxUse(boolean hasUse) { @@ -99,21 +128,23 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa protected void refreshBoxListWithSelectTableData(List list) { refreshBoxItems(category, list); refreshBoxItems(seriesName, list); - refreshBoxItems(max, list); - refreshBoxItems(q3, list); - refreshBoxItems(median, list); - refreshBoxItems(q1, list); - refreshBoxItems(min, list); + + refreshBoxItems(max.getComboBox(), list); + refreshBoxItems(q3.getComboBox(), list); + refreshBoxItems(median.getComboBox(), list); + refreshBoxItems(q1.getComboBox(), list); + refreshBoxItems(min.getComboBox(), list); } public void clearAllBoxList() { clearBoxItems(category); clearBoxItems(seriesName); - clearBoxItems(max); - clearBoxItems(q3); - clearBoxItems(median); - clearBoxItems(q1); - clearBoxItems(min); + + clearBoxItems(max.getComboBox()); + clearBoxItems(q3.getComboBox()); + clearBoxItems(median.getComboBox()); + clearBoxItems(q1.getComboBox()); + clearBoxItems(min.getComboBox()); } public void populateBean(ChartCollection collection) { @@ -127,11 +158,18 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa combineCustomEditValue(category, definition.getCategoryName()); combineCustomEditValue(seriesName, definition.getSeriesName()); - combineCustomEditValue(max, definition.getMax()); - combineCustomEditValue(q3, definition.getQ3()); - combineCustomEditValue(median, definition.getMedian()); - combineCustomEditValue(q1, definition.getQ1()); - combineCustomEditValue(min, definition.getMin()); + + max.populateComboBox(definition.getMax()); + q3.populateComboBox(definition.getQ3()); + median.populateComboBox(definition.getMedian()); + q1.populateComboBox(definition.getQ1()); + min.populateComboBox(definition.getMin()); + + max.setHeaderName(definition.getMaxLabel()); + q3.setHeaderName(definition.getQ3Label()); + median.setHeaderName(definition.getMedianLabel()); + q1.setHeaderName(definition.getQ1Label()); + min.setHeaderName(definition.getMinLabel()); } public void updateBean(ChartCollection collection) { @@ -141,11 +179,12 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa Object resultCategory = category.getSelectedItem(); Object resultSeries = seriesName.getSelectedItem(); - Object resultMax = max.getSelectedItem(); - Object resultQ3 = q3.getSelectedItem(); - Object resultMedian = median.getSelectedItem(); - Object resultQ1 = q1.getSelectedItem(); - Object resultMin = min.getSelectedItem(); + + Object resultMax = max.updateComboBox(); + Object resultQ3 = q3.updateComboBox(); + Object resultMedian = median.updateComboBox(); + Object resultQ1 = q1.updateComboBox(); + Object resultMin = min.updateComboBox(); if (resultCategory == null || ArrayUtils.contains(ChartConstants.getNoneKeys(), resultCategory)) { definition.setCategoryName(StringUtils.EMPTY); @@ -173,6 +212,12 @@ public class BoxPlotTableResultDataSeriesPane extends AbstractTableDataContentPa definition.setMin(resultMin.toString()); } + definition.setMaxLabel(max.getHeaderName()); + definition.setQ3Label(q3.getHeaderName()); + definition.setMedianLabel(median.getHeaderName()); + definition.setQ1Label(q1.getHeaderName()); + definition.setMinLabel(min.getHeaderName()); + table.setResultDefinition(definition); } } \ No newline at end of file diff --git a/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java new file mode 100644 index 0000000000..dbfcae01fe --- /dev/null +++ b/designer-chart/src/main/java/com/fr/van/chart/box/data/table/UIComboBoxWithEditLabel.java @@ -0,0 +1,86 @@ +package com.fr.van.chart.box.data.table; + +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.mainframe.chart.gui.UIEditLabel; + +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ItemListener; + +public abstract class UIComboBoxWithEditLabel extends JPanel implements UIObserver { + + private UIEditLabel editLabel; + private UIComboBox comboBox; + + protected UIObserverListener listener; + + public UIComboBoxWithEditLabel(String text) { + editLabel = new UIEditLabel(text, SwingConstants.LEFT) { + protected void doAfterMousePress() { + clearAllBackground(); + } + + protected boolean appendOriginalLabel() { + return false; + } + }; + + editLabel.setPreferredSize(new Dimension(75, 20)); + comboBox = new UIComboBox(); + + this.setLayout(new BorderLayout(4, 0)); + this.add(editLabel, BorderLayout.WEST); + this.add(comboBox, BorderLayout.CENTER); + } + + public UIComboBox getComboBox() { + return comboBox; + } + + public void setComboBox(UIComboBox comboBox) { + this.comboBox = comboBox; + } + + protected void addItemListener(ItemListener aListener) { + comboBox.addItemListener(aListener); + } + + protected abstract void clearAllBackground(); + + public void clearBackGround() { + editLabel.resetNomalrBackground(); + } + + public boolean shouldResponseChangeListener() { + return true; + } + + public void registerChangeListener(UIObserverListener listener) { + this.listener = listener; + editLabel.registerChangeListener(listener); + } + + public void populateComboBox(String value) { + if (comboBox != null) { + comboBox.setEditable(true); + comboBox.setSelectedItem(value); + comboBox.setEditable(false); + } + } + + public Object updateComboBox() { + return comboBox.getSelectedItem(); + } + + public String getHeaderName() { + return editLabel.getText(); + } + + public void setHeaderName(String text) { + editLabel.setText(text); + } +}