Browse Source
* commit 'd8659e6b51e8822fd41747ec709dd578ecc570bd': CHART-4027 图表数据设计器界面research/10.0
eason
6 years ago
19 changed files with 1542 additions and 301 deletions
@ -0,0 +1,58 @@
|
||||
package com.fr.design.chartx; |
||||
|
||||
import com.fr.chart.chartattr.ChartCollection; |
||||
import com.fr.chartx.data.ChartDataDefinitionProvider; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.plugin.chart.vanchart.VanChart; |
||||
|
||||
import java.awt.BorderLayout; |
||||
|
||||
/** |
||||
* Created by shine on 2019/4/15. |
||||
*/ |
||||
public abstract class AbstractChartDataPane<T extends ChartDataDefinitionProvider> extends ChartDataPane { |
||||
|
||||
public AbstractChartDataPane(AttributeChangeListener listener) { |
||||
super(listener); |
||||
} |
||||
|
||||
protected abstract void populate(T t); |
||||
|
||||
protected abstract T update(); |
||||
|
||||
@Override |
||||
public void populate(ChartCollection collection) { |
||||
if (collection == null) { |
||||
return; |
||||
} |
||||
VanChart chart = collection.getSelectedChart(VanChart.class); |
||||
if (chart == null) { |
||||
return; |
||||
} |
||||
|
||||
this.removeAll(); |
||||
this.add(createContentPane(), BorderLayout.CENTER); |
||||
|
||||
ChartDataDefinitionProvider dataSetCollection = chart.getChartDataDefinition(); |
||||
|
||||
populate((T) dataSetCollection); |
||||
|
||||
this.initAllListeners(); |
||||
this.validate(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void update(ChartCollection collection) { |
||||
if (collection == null) { |
||||
return; |
||||
} |
||||
VanChart chart = collection.getSelectedChart(VanChart.class); |
||||
if (chart == null) { |
||||
return; |
||||
} |
||||
|
||||
chart.setChartDataDefinition(update()); |
||||
} |
||||
} |
@ -0,0 +1,39 @@
|
||||
package com.fr.design.chartx; |
||||
|
||||
import com.fr.chartx.data.GanttChartDataDefinition; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
import com.fr.van.chart.map.designer.VanChartGroupPane; |
||||
|
||||
import javax.swing.JPanel; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/22. |
||||
*/ |
||||
public class GanttChartDataPane extends AbstractChartDataPane<GanttChartDataDefinition> { |
||||
|
||||
private MultiCategoryChartDataPane dataPane; |
||||
private MultiCategoryChartDataPane linkPane; |
||||
|
||||
@Override |
||||
protected JPanel createContentPane() { |
||||
dataPane = new MultiCategoryChartDataPane(listener); |
||||
linkPane = new MultiCategoryChartDataPane(listener); |
||||
return new VanChartGroupPane(new String[]{"data", "link"}, new JPanel[]{dataPane, linkPane}) { |
||||
}; |
||||
} |
||||
|
||||
public GanttChartDataPane(AttributeChangeListener listener) { |
||||
super(listener); |
||||
} |
||||
|
||||
@Override |
||||
protected void populate(GanttChartDataDefinition ganttChartDataDefinition) { |
||||
dataPane.populate(ganttChartDataDefinition.getDataDefinition()); |
||||
linkPane.populate(ganttChartDataDefinition.getLinkDefinition()); |
||||
} |
||||
|
||||
@Override |
||||
protected GanttChartDataDefinition update() { |
||||
return null; |
||||
} |
||||
} |
@ -0,0 +1,43 @@
|
||||
package com.fr.design.chartx; |
||||
|
||||
import com.fr.chartx.data.AbstractDataDefinition; |
||||
import com.fr.design.chartx.fields.diff.MultiCategoryCellDataFieldsPane; |
||||
import com.fr.design.chartx.fields.diff.MultiCategoryDataSetFieldsPane; |
||||
import com.fr.design.chartx.single.SingleDataPane; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
|
||||
import javax.swing.JPanel; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/22. |
||||
*/ |
||||
public class MultiCategoryChartDataPane extends AbstractChartDataPane<AbstractDataDefinition> { |
||||
|
||||
private SingleDataPane singleDataPane; |
||||
|
||||
public MultiCategoryChartDataPane(AttributeChangeListener listener) { |
||||
super(listener); |
||||
} |
||||
|
||||
@Override |
||||
protected void populate(AbstractDataDefinition dataDefinition) { |
||||
singleDataPane.populateBean(dataDefinition); |
||||
} |
||||
|
||||
@Override |
||||
protected AbstractDataDefinition update() { |
||||
return singleDataPane.updateBean(); |
||||
} |
||||
|
||||
@Override |
||||
protected JPanel createContentPane() { |
||||
singleDataPane = createSingleDataPane(); |
||||
return singleDataPane; |
||||
} |
||||
|
||||
protected SingleDataPane createSingleDataPane() { |
||||
return new SingleDataPane(new MultiCategoryDataSetFieldsPane(), new MultiCategoryCellDataFieldsPane()); |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,20 @@
|
||||
package com.fr.design.chartx; |
||||
|
||||
import com.fr.design.chartx.fields.diff.MultiCategoryCellDataFieldsPane; |
||||
import com.fr.design.chartx.fields.diff.MultiCategoryDataSetFieldsPane; |
||||
import com.fr.design.chartx.single.SingleDataPane; |
||||
import com.fr.design.gui.frpane.AttributeChangeListener; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/22. |
||||
*/ |
||||
public class WordCloundChartDataPane extends MultiCategoryChartDataPane { |
||||
public WordCloundChartDataPane(AttributeChangeListener listener) { |
||||
super(listener); |
||||
} |
||||
|
||||
@Override |
||||
protected SingleDataPane createSingleDataPane() { |
||||
return new SingleDataPane(new MultiCategoryDataSetFieldsPane(), new MultiCategoryCellDataFieldsPane()); |
||||
} |
||||
} |
@ -0,0 +1,368 @@
|
||||
package com.fr.design.chartx.component; |
||||
|
||||
import com.fr.data.util.function.AbstractDataFunction; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||
import com.fr.design.gui.frpane.UICorrelationPane; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itable.UITable; |
||||
import com.fr.design.gui.itable.UITableEditor; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.design.mainframe.chart.gui.data.CalculateComboBox; |
||||
import com.fr.design.mainframe.chart.gui.data.table.DataPaneHelper; |
||||
import com.fr.extended.chart.UIComboBoxWithNone; |
||||
import com.fr.general.GeneralUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.JComponent; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JTable; |
||||
import javax.swing.SwingConstants; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by shine on 2018/9/12. |
||||
* 系列名使用字段名or字段值的抽象的pane 支持多种属性结构的存取 |
||||
*/ |
||||
public abstract class AbstractCustomFieldComboBoxPane<T> extends UIComboBoxPane<T> { |
||||
private static final String[] HEADS = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Field_Name"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Series_Name"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Summary_Method")}; |
||||
|
||||
private AbstractUseFieldValuePane useFieldValuePane; |
||||
|
||||
private AbstractCustomFieldNamePane customFieldNamePane; |
||||
|
||||
private List<String> fieldList = new ArrayList<String>(); |
||||
|
||||
@Override |
||||
protected void initLayout() { |
||||
this.setLayout(new BorderLayout(0, 6)); |
||||
JPanel northPane = new JPanel(new BorderLayout()); |
||||
northPane.add(jcb, BorderLayout.CENTER); |
||||
UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Series_Name_From")); |
||||
label.setPreferredSize(new Dimension(ChartDataPane.LABEL_WIDTH, 20)); |
||||
northPane.add(label, BorderLayout.WEST); |
||||
this.add(northPane, BorderLayout.NORTH); |
||||
this.add(cardPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
protected List<FurtherBasicBeanPane<? extends T>> initPaneList() { |
||||
useFieldValuePane = createUseFieldValuePane(); |
||||
customFieldNamePane = createCustomFieldNamePane(); |
||||
List<FurtherBasicBeanPane<? extends T>> list = new ArrayList<FurtherBasicBeanPane<? extends T>>(); |
||||
list.add(useFieldValuePane); |
||||
list.add(customFieldNamePane); |
||||
return list; |
||||
} |
||||
|
||||
protected abstract AbstractUseFieldValuePane createUseFieldValuePane(); |
||||
|
||||
protected abstract AbstractCustomFieldNamePane createCustomFieldNamePane(); |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return StringUtils.EMPTY; |
||||
} |
||||
|
||||
protected boolean valueComboBoxHasNone() { |
||||
return false; |
||||
} |
||||
|
||||
public void checkBoxUse(boolean hasUse) { |
||||
jcb.setEnabled(hasUse); |
||||
useFieldValuePane.checkBoxUse(hasUse); |
||||
} |
||||
|
||||
public void clearAllBoxList() { |
||||
useFieldValuePane.clearAllBoxList(); |
||||
fieldList.clear(); |
||||
} |
||||
|
||||
public void refreshBoxListWithSelectTableData(List columnNameList) { |
||||
useFieldValuePane.refreshBoxListWithSelectTableData(columnNameList); |
||||
fieldList = columnNameList; |
||||
} |
||||
|
||||
protected void populateCustomFieldNamePane(T t) { |
||||
customFieldNamePane.populateBean(t); |
||||
} |
||||
|
||||
protected void updateCustomFieldNamePane(T t) { |
||||
customFieldNamePane.updateBean(t); |
||||
} |
||||
|
||||
protected void populateUseFieldValuePane(T t) { |
||||
useFieldValuePane.populateBean(t); |
||||
} |
||||
|
||||
protected void updateUseFieldValuePane(T t) { |
||||
useFieldValuePane.updateBean(t); |
||||
} |
||||
|
||||
protected abstract class AbstractUseFieldValuePane<T> extends FurtherBasicBeanPane<T> { |
||||
private UIComboBox series; |
||||
private UIComboBox value; |
||||
private CalculateComboBox function; |
||||
|
||||
public AbstractUseFieldValuePane() { |
||||
initComponents(); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
|
||||
series = new UIComboBox(); |
||||
value = valueComboBoxHasNone() ? new UIComboBoxWithNone() : new UIComboBox(); |
||||
|
||||
function = new CalculateComboBox(); |
||||
|
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{new UILabel(HEADS[1], SwingConstants.LEFT), series}, |
||||
new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_Value"), SwingConstants.LEFT), value}, |
||||
new Component[]{new UILabel(HEADS[2], SwingConstants.LEFT), function}, |
||||
}; |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double[] columnSize = {78, 122}; |
||||
double[] rowSize = {p, p, p}; |
||||
|
||||
JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); |
||||
|
||||
this.setLayout(new BorderLayout(0, 6)); |
||||
this.add(panel, BorderLayout.CENTER); |
||||
} |
||||
|
||||
public void checkBoxUse(boolean hasUse) { |
||||
series.setEnabled(hasUse); |
||||
value.setEnabled(hasUse); |
||||
function.setEnabled(hasUse); |
||||
} |
||||
|
||||
public void clearAllBoxList() { |
||||
DataPaneHelper.clearBoxItems(series); |
||||
DataPaneHelper.clearBoxItems(value); |
||||
} |
||||
|
||||
public void refreshBoxListWithSelectTableData(List columnNameList) { |
||||
DataPaneHelper.refreshBoxItems(series, columnNameList); |
||||
DataPaneHelper.refreshBoxItems(value, columnNameList); |
||||
} |
||||
|
||||
protected void populateSeries(String item) { |
||||
series.setSelectedItem(item); |
||||
} |
||||
|
||||
protected void populateValue(String item) { |
||||
value.setSelectedItem(item); |
||||
} |
||||
|
||||
protected void populateFunction(AbstractDataFunction _function) { |
||||
function.populateBean(_function); |
||||
} |
||||
|
||||
protected String updateSeries() { |
||||
return GeneralUtils.objectToString(series.getSelectedItem()); |
||||
} |
||||
|
||||
protected String updateValue() { |
||||
return GeneralUtils.objectToString(value.getSelectedItem()); |
||||
} |
||||
|
||||
protected AbstractDataFunction updateFunction() { |
||||
return function.updateBean(); |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Enable_Field_Value"); |
||||
} |
||||
|
||||
@Override |
||||
public T updateBean() { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
protected abstract class AbstractCustomFieldNamePane<T> extends FurtherBasicBeanPane<T> { |
||||
|
||||
private UICorrelationPane correlationPane; |
||||
|
||||
public AbstractCustomFieldNamePane() { |
||||
initComponents(); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
|
||||
correlationPane = new UICorrelationPane(HEADS) { |
||||
@Override |
||||
protected ActionListener getAddButtonListener() { |
||||
return new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
tablePane.addLine(new String[]{StringUtils.EMPTY, StringUtils.EMPTY, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_None")}); |
||||
fireTargetChanged(); |
||||
} |
||||
}; |
||||
} |
||||
|
||||
public UITableEditor createUITableEditor() { |
||||
return new Editor() { |
||||
@Override |
||||
protected UICorrelationPane getParent() { |
||||
return correlationPane; |
||||
} |
||||
}; |
||||
} |
||||
}; |
||||
|
||||
this.setLayout(new BorderLayout()); |
||||
this.add(correlationPane, BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
|
||||
protected void populate(List<Object[]> list) { |
||||
correlationPane.populateBean(list); |
||||
} |
||||
|
||||
protected List<Object[]> update() { |
||||
return correlationPane.updateBean(); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Enable_Field_Name"); |
||||
} |
||||
|
||||
@Override |
||||
public T updateBean() { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
private abstract class Editor extends UITableEditor { |
||||
private JComponent editorComponent; |
||||
|
||||
protected abstract UICorrelationPane getParent(); |
||||
|
||||
@Override |
||||
public Object getCellEditorValue() { |
||||
if (editorComponent instanceof UIComboBox) { |
||||
return ((UIComboBox) editorComponent).getSelectedItem(); |
||||
} else if (editorComponent instanceof UITextField) { |
||||
return ((UITextField) editorComponent).getText(); |
||||
} else if (editorComponent instanceof CalculateComboBox) { |
||||
return ((CalculateComboBox) editorComponent).getSelectedItem(); |
||||
} |
||||
return super.getCellEditorValue(); |
||||
} |
||||
|
||||
@Override |
||||
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, final int row, int column) { |
||||
|
||||
switch (column) { |
||||
case 0: |
||||
editorComponent = createComboBoxEdit(row, value); |
||||
break; |
||||
case 1: |
||||
editorComponent = createTextEdit(value); |
||||
break; |
||||
default: |
||||
editorComponent = createCalculateComboBox(value); |
||||
break; |
||||
|
||||
} |
||||
return editorComponent; |
||||
} |
||||
|
||||
private void setDefaultName(int row) { |
||||
UITable table = getParent().getTable(); |
||||
Object object = table.getValueAt(row, 0); |
||||
if (object != null) { |
||||
table.setValueAt(object, row, 1); |
||||
} |
||||
} |
||||
|
||||
private UIComboBox createComboBoxEdit(final int row, Object value) { |
||||
UIComboBox uiComboBox = new UIComboBox(fieldList.toArray()); |
||||
|
||||
uiComboBox.addItemListener(new ItemListener() { |
||||
public void itemStateChanged(ItemEvent e) { |
||||
getParent().stopCellEditing(); |
||||
getParent().fireTargetChanged(); |
||||
setDefaultName(row); |
||||
} |
||||
}); |
||||
|
||||
if (value != null && StringUtils.isNotEmpty(value.toString())) { |
||||
uiComboBox.getModel().setSelectedItem(value); |
||||
} else { |
||||
uiComboBox.getModel().setSelectedItem(value); |
||||
} |
||||
|
||||
return uiComboBox; |
||||
} |
||||
|
||||
private UITextField createTextEdit(Object value) { |
||||
UITextField uiTextField = new UITextField(); |
||||
if (value != null) { |
||||
uiTextField.setText(value.toString()); |
||||
} |
||||
|
||||
uiTextField.registerChangeListener(new UIObserverListener() { |
||||
@Override |
||||
public void doChange() { |
||||
getParent().fireTargetChanged(); |
||||
} |
||||
}); |
||||
|
||||
return uiTextField; |
||||
} |
||||
|
||||
private CalculateComboBox createCalculateComboBox(Object value) { |
||||
CalculateComboBox calculateComboBox = new CalculateComboBox(); |
||||
if (value != null) { |
||||
calculateComboBox.setSelectedItem(value); |
||||
} |
||||
calculateComboBox.addItemListener(new ItemListener() { |
||||
public void itemStateChanged(ItemEvent e) { |
||||
getParent().stopCellEditing(); |
||||
getParent().fireTargetChanged(); |
||||
} |
||||
}); |
||||
return calculateComboBox; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,168 @@
|
||||
package com.fr.design.chartx.component; |
||||
|
||||
import com.fr.chartx.data.field.ColumnField; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.general.IOUtils; |
||||
|
||||
import javax.swing.BoxLayout; |
||||
import javax.swing.JComponent; |
||||
import javax.swing.JPanel; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Dimension; |
||||
import java.awt.FlowLayout; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
|
||||
/** |
||||
* Created by shine on 2019/4/10. |
||||
* 一列组件<T extends JComponent> 可增可删 |
||||
*/ |
||||
public abstract class AbstractMultiComponentPane<T extends JComponent> extends JPanel { |
||||
private static final int COM_W = 96; |
||||
private static final int H = 20; |
||||
private static final int ICON_W = 20; |
||||
|
||||
private JPanel boxPane; |
||||
private UIButton addButton; |
||||
|
||||
private T firstFieldComponent; |
||||
|
||||
private List<T> categoryComponentList = new ArrayList<T>(); |
||||
|
||||
|
||||
protected abstract T createFirstFieldComponent(); |
||||
|
||||
protected abstract T createOtherFieldComponent(); |
||||
|
||||
protected abstract void populateField(T component, ColumnField field); |
||||
|
||||
protected abstract void updateField(T component, ColumnField field); |
||||
|
||||
public AbstractMultiComponentPane() { |
||||
|
||||
UILabel label = new BoldFontTextLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Style_Category")); |
||||
label.setPreferredSize(new Dimension(ChartDataPane.LABEL_WIDTH, ChartDataPane.LABEL_HEIGHT)); |
||||
|
||||
firstFieldComponent = createFirstFieldComponent(); |
||||
firstFieldComponent.setPreferredSize(new Dimension(COM_W, H)); |
||||
|
||||
addButton = new UIButton(IOUtils.readIcon("/com/fr/design/images/buttonicon/add.png")); |
||||
addButton.setPreferredSize(new Dimension(ICON_W, H)); |
||||
addButton.addActionListener(new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
if (canAdd()) { |
||||
addNewComboBox(); |
||||
} |
||||
} |
||||
}); |
||||
|
||||
final JPanel panel = new JPanel(); |
||||
panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 2)); |
||||
|
||||
panel.add(label); |
||||
panel.add(firstFieldComponent); |
||||
panel.add(addButton); |
||||
|
||||
boxPane = new JPanel(); |
||||
boxPane.setLayout(new BoxLayout(boxPane, BoxLayout.Y_AXIS)); |
||||
|
||||
this.setLayout(new BorderLayout(4, 0)); |
||||
this.add(panel, BorderLayout.NORTH); |
||||
this.add(boxPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
private JPanel addComboBoxAndButtonToBox(T uiComboBox, UIButton uiButton) { |
||||
final JPanel panel = new JPanel(); |
||||
panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 2)); |
||||
|
||||
panel.add(uiComboBox); |
||||
panel.add(uiButton); |
||||
|
||||
boxPane.add(panel); |
||||
categoryComponentList.add(uiComboBox); |
||||
|
||||
return panel; |
||||
} |
||||
|
||||
private void addNewComboBox() { |
||||
final T comboBox = createOtherFieldComponent(); |
||||
comboBox.setPreferredSize(new Dimension(COM_W, H)); |
||||
|
||||
UIButton delButton = new UIButton(IOUtils.readIcon("com/fr/design/images/toolbarbtn/close.png")); |
||||
delButton.setPreferredSize(new Dimension(ICON_W, H)); |
||||
|
||||
final JPanel panel = addComboBoxAndButtonToBox(comboBox, delButton); |
||||
|
||||
delButton.addActionListener(new ActionListener() { |
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
boxPane.remove(panel); |
||||
categoryComponentList.remove(comboBox); |
||||
checkAddButton(); |
||||
relayoutPane(); |
||||
} |
||||
}); |
||||
|
||||
relayoutPane(); |
||||
checkAddButton(); |
||||
} |
||||
|
||||
private void relayoutPane() { |
||||
this.revalidate(); |
||||
} |
||||
|
||||
private void checkAddButton() { |
||||
addButton.setEnabled(canAdd()); |
||||
} |
||||
|
||||
private boolean canAdd() { |
||||
return categoryComponentList.size() < 3; |
||||
} |
||||
|
||||
public List<T> componentList() { |
||||
List<T> list = new ArrayList<>(categoryComponentList); |
||||
list.add(firstFieldComponent); |
||||
return list; |
||||
} |
||||
|
||||
public void populate(List<ColumnField> categoryList) { |
||||
int comboBoxSize = categoryComponentList.size(), |
||||
len = categoryList.size(); |
||||
|
||||
if (len > 0) { |
||||
populateField(firstFieldComponent, categoryList.get(0)); |
||||
} |
||||
|
||||
for (int i = 1; i < len; i++) { |
||||
if (i > comboBoxSize) { |
||||
addNewComboBox(); |
||||
} |
||||
T comboBox = categoryComponentList.get(i - 1); |
||||
populateField(comboBox, categoryList.get(i)); |
||||
} |
||||
|
||||
checkAddButton(); |
||||
relayoutPane(); |
||||
} |
||||
|
||||
public void update(List<ColumnField> categoryList) { |
||||
categoryList.clear(); |
||||
|
||||
ColumnField temp1 = new ColumnField(); |
||||
categoryList.add(temp1); |
||||
updateField(firstFieldComponent, temp1); |
||||
|
||||
for (T comboBox : categoryComponentList) { |
||||
ColumnField temp = new ColumnField(); |
||||
categoryList.add(temp); |
||||
updateField(comboBox, temp); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
package com.fr.design.chartx.component; |
||||
|
||||
import com.fr.chartx.data.field.CustomFieldValueColumnFields; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/17. |
||||
*/ |
||||
public class CustomFieldComboBoxPane extends AbstractCustomFieldComboBoxPane<CustomFieldValueColumnFields> { |
||||
|
||||
@Override |
||||
protected AbstractUseFieldValuePane createUseFieldValuePane() { |
||||
return new UseFieldValuePane(); |
||||
} |
||||
|
||||
@Override |
||||
protected AbstractCustomFieldNamePane createCustomFieldNamePane() { |
||||
return new CustomFieldNamePane(); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(CustomFieldValueColumnFields ob) { |
||||
if (ob.isCustomFieldValue()) { |
||||
populateCustomFieldNamePane(ob); |
||||
jcb.setSelectedIndex(1); |
||||
} else { |
||||
populateUseFieldValuePane(ob); |
||||
jcb.setSelectedIndex(0); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void updateBean(CustomFieldValueColumnFields ob) { |
||||
if (jcb.getSelectedIndex() == 0) { |
||||
ob.setCustomFieldValue(false); |
||||
updateUseFieldValuePane(ob); |
||||
} else { |
||||
ob.setCustomFieldValue(true); |
||||
updateCustomFieldNamePane(ob); |
||||
} |
||||
} |
||||
|
||||
private class UseFieldValuePane extends AbstractUseFieldValuePane<CustomFieldValueColumnFields> { |
||||
|
||||
@Override |
||||
public void populateBean(CustomFieldValueColumnFields ob) { |
||||
|
||||
} |
||||
} |
||||
|
||||
private class CustomFieldNamePane extends AbstractCustomFieldNamePane<CustomFieldValueColumnFields> { |
||||
|
||||
@Override |
||||
public void populateBean(CustomFieldValueColumnFields ob) { |
||||
|
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,32 @@
|
||||
package com.fr.design.chartx.component; |
||||
|
||||
import com.fr.chartx.data.field.ColumnField; |
||||
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.extended.chart.UIComboBoxWithNone; |
||||
|
||||
/** |
||||
* Created by shine on 2019/4/12. |
||||
*/ |
||||
public class MultiComboBoxPane extends AbstractMultiComponentPane<UIComboBox> { |
||||
|
||||
@Override |
||||
protected UIComboBox createFirstFieldComponent() { |
||||
return new UIComboBoxWithNone(); |
||||
} |
||||
|
||||
@Override |
||||
protected UIComboBox createOtherFieldComponent() { |
||||
return new UIComboBox(); |
||||
} |
||||
|
||||
@Override |
||||
protected void populateField(UIComboBox component, ColumnField field) { |
||||
AbstractDataSetFieldsPane.populateField(component, field); |
||||
} |
||||
|
||||
@Override |
||||
protected void updateField(UIComboBox component, ColumnField field) { |
||||
AbstractDataSetFieldsPane.updateField(component, field); |
||||
} |
||||
} |
@ -0,0 +1,31 @@
|
||||
package com.fr.design.chartx.component; |
||||
|
||||
import com.fr.chartx.data.field.ColumnField; |
||||
import com.fr.design.chartx.fields.AbstractCellDataFieldsPane; |
||||
import com.fr.design.formula.TinyFormulaPane; |
||||
|
||||
/** |
||||
* Created by shine on 2019/4/12. |
||||
*/ |
||||
public class MultiTinyFormulaPane extends AbstractMultiComponentPane<TinyFormulaPane> { |
||||
@Override |
||||
protected TinyFormulaPane createFirstFieldComponent() { |
||||
return new TinyFormulaPane(); |
||||
} |
||||
|
||||
@Override |
||||
protected TinyFormulaPane createOtherFieldComponent() { |
||||
return new TinyFormulaPane(); |
||||
} |
||||
|
||||
@Override |
||||
protected void populateField(TinyFormulaPane component, ColumnField field) { |
||||
AbstractCellDataFieldsPane.populateField(component, field); |
||||
} |
||||
|
||||
@Override |
||||
protected void updateField(TinyFormulaPane component, ColumnField field) { |
||||
AbstractCellDataFieldsPane.updateField(component, field); |
||||
|
||||
} |
||||
} |
@ -0,0 +1,93 @@
|
||||
package com.fr.design.chartx.fields; |
||||
|
||||
import com.fr.chartx.data.field.AbstractColumnFieldCollection; |
||||
import com.fr.chartx.data.field.ColumnField; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.formula.TinyFormulaPane; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.SwingConstants; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.util.Arrays; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/16. |
||||
* 单元格数据源 具体有哪些字段的一个抽象pane |
||||
*/ |
||||
public abstract class AbstractCellDataFieldsPane<T extends AbstractColumnFieldCollection> extends BasicBeanPane<T> { |
||||
|
||||
public AbstractCellDataFieldsPane() { |
||||
initComponents(); |
||||
} |
||||
|
||||
protected void initComponents() { |
||||
|
||||
this.setLayout(new BorderLayout(0, 6)); |
||||
|
||||
this.add(addNorthPane(), BorderLayout.NORTH); |
||||
this.add(addCenterPane(), BorderLayout.CENTER); |
||||
this.add(addSouthPane(), BorderLayout.SOUTH); |
||||
|
||||
this.setBorder(BorderFactory.createEmptyBorder(0, 15, 0, 8)); |
||||
} |
||||
|
||||
protected JPanel addCenterPane() { |
||||
String[] labels = fieldLabels(); |
||||
Component[] formulaPanes = fieldComponents(); |
||||
|
||||
int len = Math.min(labels.length, formulaPanes.length); |
||||
|
||||
Component[][] components = new Component[len][2]; |
||||
for (int i = 0; i < len; i++) { |
||||
components[i] = new Component[]{new UILabel(labels[i], SwingConstants.LEFT), formulaPanes[i]}; |
||||
} |
||||
|
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double[] columnSize = {ChartDataPane.LABEL_WIDTH, 124}; |
||||
double[] rowSize = new double[len]; |
||||
Arrays.fill(rowSize, p); |
||||
|
||||
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 6); |
||||
} |
||||
|
||||
|
||||
protected JPanel addNorthPane() { |
||||
return new JPanel(); |
||||
} |
||||
|
||||
protected JPanel addSouthPane() { |
||||
return new JPanel(); |
||||
} |
||||
|
||||
protected Component[] fieldComponents() { |
||||
return formulaPanes(); |
||||
} |
||||
|
||||
protected abstract String[] fieldLabels(); |
||||
|
||||
protected abstract TinyFormulaPane[] formulaPanes(); |
||||
|
||||
@Override |
||||
public abstract T updateBean(); |
||||
|
||||
public static void populateField(TinyFormulaPane formulaPane, ColumnField field) { |
||||
formulaPane.populateBean(field.getFieldName()); |
||||
} |
||||
|
||||
public static void updateField(TinyFormulaPane formulaPane, ColumnField field) { |
||||
field.setFieldName(formulaPane.updateBean()); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return StringUtils.EMPTY; |
||||
} |
||||
} |
@ -0,0 +1,142 @@
|
||||
package com.fr.design.chartx.fields; |
||||
|
||||
import com.fr.chartx.data.field.AbstractColumnFieldCollection; |
||||
import com.fr.chartx.data.field.ColumnField; |
||||
import com.fr.data.util.function.AbstractDataFunction; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.design.mainframe.chart.gui.data.CalculateComboBox; |
||||
import com.fr.design.mainframe.chart.gui.data.table.DataPaneHelper; |
||||
import com.fr.general.GeneralUtils; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.SwingConstants; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.util.Arrays; |
||||
import java.util.List; |
||||
|
||||
import static com.fr.design.mainframe.chart.gui.data.table.DataPaneHelper.refreshBoxItems; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/16. |
||||
* 数据集数据源 具体有哪些字段的一个抽象pane |
||||
*/ |
||||
public abstract class AbstractDataSetFieldsPane<T extends AbstractColumnFieldCollection> extends BasicBeanPane<T> { |
||||
|
||||
public AbstractDataSetFieldsPane() { |
||||
initComponents(); |
||||
} |
||||
|
||||
protected void initComponents() { |
||||
|
||||
this.setLayout(new BorderLayout(0, 4)); |
||||
this.setBorder(BorderFactory.createEmptyBorder(2, 24, 0, 15)); |
||||
|
||||
JPanel north = createNorthPane(), |
||||
center = createCenterPane(), |
||||
south = createSouthPane(); |
||||
|
||||
if (north != null) { |
||||
this.add(north, BorderLayout.NORTH); |
||||
} |
||||
|
||||
if (center != null) { |
||||
this.add(center, BorderLayout.CENTER); |
||||
} |
||||
|
||||
if (south != null) { |
||||
this.add(south, BorderLayout.SOUTH); |
||||
} |
||||
} |
||||
|
||||
protected JPanel createNorthPane() { |
||||
return null; |
||||
} |
||||
|
||||
protected JPanel createCenterPane() { |
||||
String[] labels = fieldLabels(); |
||||
Component[] fieldComponents = fieldComponents(); |
||||
|
||||
int len = Math.min(labels.length, fieldComponents.length); |
||||
|
||||
if (len == 0) { |
||||
return null; |
||||
} |
||||
|
||||
Component[][] components = new Component[len][2]; |
||||
for (int i = 0; i < len; i++) { |
||||
components[i] = new Component[]{new UILabel(labels[i], SwingConstants.LEFT), fieldComponents[i]}; |
||||
} |
||||
|
||||
double p = TableLayout.PREFERRED; |
||||
double[] columnSize = {ChartDataPane.LABEL_WIDTH, 122}; |
||||
double[] rowSize = new double[len]; |
||||
Arrays.fill(rowSize, p); |
||||
|
||||
return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, 0, 6); |
||||
} |
||||
|
||||
protected JPanel createSouthPane() { |
||||
return null; |
||||
} |
||||
|
||||
protected Component[] fieldComponents() { |
||||
return filedComboBoxes(); |
||||
} |
||||
|
||||
protected abstract String[] fieldLabels(); |
||||
|
||||
protected abstract UIComboBox[] filedComboBoxes(); |
||||
|
||||
public void checkBoxUse(boolean hasUse) { |
||||
for (Component component : fieldComponents()) { |
||||
component.setEnabled(hasUse); |
||||
} |
||||
} |
||||
|
||||
public void clearAllBoxList() { |
||||
for (UIComboBox comboBox : filedComboBoxes()) { |
||||
DataPaneHelper.clearBoxItems(comboBox); |
||||
} |
||||
} |
||||
|
||||
public void refreshBoxListWithSelectTableData(List columnNameList) { |
||||
for (UIComboBox comboBox : filedComboBoxes()) { |
||||
refreshBoxItems(comboBox, columnNameList); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public abstract T updateBean(); |
||||
|
||||
public static void populateField(UIComboBox comboBox, ColumnField field) { |
||||
populateFunctionField(comboBox, null, field); |
||||
} |
||||
|
||||
public static void updateField(UIComboBox comboBox, ColumnField field) { |
||||
updateFunctionField(comboBox, null, field); |
||||
} |
||||
|
||||
protected static void populateFunctionField(UIComboBox comboBox, CalculateComboBox calculateComboBox, ColumnField field) { |
||||
comboBox.setSelectedItem(field.getFieldName()); |
||||
if (calculateComboBox != null) { |
||||
calculateComboBox.populateBean((AbstractDataFunction) field.getDataFunction()); |
||||
} |
||||
} |
||||
|
||||
protected static void updateFunctionField(UIComboBox comboBox, CalculateComboBox calculateComboBox, ColumnField field) { |
||||
field.setFieldName(GeneralUtils.objectToString(comboBox.getSelectedItem())); |
||||
if (calculateComboBox != null) { |
||||
field.setDataFunction(calculateComboBox.updateBean()); |
||||
} else { |
||||
field.setDataFunction(null); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,60 @@
|
||||
package com.fr.design.chartx.fields.diff; |
||||
|
||||
import com.fr.chartx.data.field.diff.AbstractColumnFieldCollectionWithCustomField; |
||||
import com.fr.design.chartx.component.CustomFieldComboBoxPane; |
||||
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane; |
||||
|
||||
import javax.swing.JPanel; |
||||
import java.awt.BorderLayout; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/16. |
||||
* 带有 自定义系列名(fr表现为 系列名使用字段名) 的字段集合 的一个pane |
||||
*/ |
||||
public abstract class AbstractDataSetFieldsWithCustomFieldPane<T extends AbstractColumnFieldCollectionWithCustomField> |
||||
extends AbstractDataSetFieldsPane<T> { |
||||
|
||||
private CustomFieldComboBoxPane customFieldComboBoxPane; |
||||
|
||||
@Override |
||||
protected JPanel createCenterPane() { |
||||
JPanel normalCenter = super.createCenterPane(); |
||||
customFieldComboBoxPane = new CustomFieldComboBoxPane(); |
||||
|
||||
if (normalCenter != null) { |
||||
JPanel panel = new JPanel(new BorderLayout()); |
||||
panel.add(normalCenter, BorderLayout.CENTER); |
||||
panel.add(customFieldComboBoxPane, BorderLayout.SOUTH); |
||||
return panel; |
||||
} else { |
||||
return customFieldComboBoxPane; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void checkBoxUse(boolean hasUse) { |
||||
super.checkBoxUse(hasUse); |
||||
customFieldComboBoxPane.checkBoxUse(hasUse); |
||||
} |
||||
|
||||
@Override |
||||
public void clearAllBoxList() { |
||||
super.clearAllBoxList(); |
||||
customFieldComboBoxPane.clearAllBoxList(); |
||||
} |
||||
|
||||
@Override |
||||
public void refreshBoxListWithSelectTableData(List columnNameList) { |
||||
super.refreshBoxListWithSelectTableData(columnNameList); |
||||
customFieldComboBoxPane.refreshBoxListWithSelectTableData(columnNameList); |
||||
} |
||||
|
||||
protected void populateCustomPane(AbstractColumnFieldCollectionWithCustomField t) { |
||||
customFieldComboBoxPane.populateBean(t.getCustomFieldValueColumnFields()); |
||||
} |
||||
|
||||
protected void updateCustomPane(AbstractColumnFieldCollectionWithCustomField t) { |
||||
customFieldComboBoxPane.updateBean(t.getCustomFieldValueColumnFields()); |
||||
} |
||||
} |
@ -0,0 +1,65 @@
|
||||
package com.fr.design.chartx.fields.diff; |
||||
|
||||
import com.fr.chartx.data.field.ColumnField; |
||||
import com.fr.chartx.data.field.diff.MultiCategoryColumnFieldCollection; |
||||
import com.fr.design.chartx.component.MultiTinyFormulaPane; |
||||
import com.fr.design.chartx.fields.AbstractCellDataFieldsPane; |
||||
import com.fr.design.formula.TinyFormulaPane; |
||||
|
||||
import javax.swing.JPanel; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by shine on 2019/4/12. |
||||
*/ |
||||
public class MultiCategoryCellDataFieldsPane extends AbstractCellDataFieldsPane<MultiCategoryColumnFieldCollection> { |
||||
|
||||
private MultiTinyFormulaPane multiCategoryPane; |
||||
|
||||
private void createMultiFormulaPane() { |
||||
if (multiCategoryPane == null) { |
||||
multiCategoryPane = new MultiTinyFormulaPane(); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected JPanel addNorthPane() { |
||||
|
||||
createMultiFormulaPane(); |
||||
|
||||
return multiCategoryPane; |
||||
} |
||||
|
||||
@Override |
||||
protected String[] fieldLabels() { |
||||
return new String[0]; |
||||
} |
||||
|
||||
@Override |
||||
protected TinyFormulaPane[] formulaPanes() { |
||||
|
||||
createMultiFormulaPane(); |
||||
|
||||
List<TinyFormulaPane> list = multiCategoryPane.componentList(); |
||||
return list.toArray(new TinyFormulaPane[list.size()]); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(MultiCategoryColumnFieldCollection ob) { |
||||
|
||||
List<ColumnField> categoryList = ob.getCategoryList(); |
||||
|
||||
multiCategoryPane.populate(categoryList); |
||||
} |
||||
|
||||
@Override |
||||
public MultiCategoryColumnFieldCollection updateBean() { |
||||
|
||||
MultiCategoryColumnFieldCollection fieldCollection = new MultiCategoryColumnFieldCollection(); |
||||
List<ColumnField> categoryList = fieldCollection.getCategoryList(); |
||||
|
||||
multiCategoryPane.update(categoryList); |
||||
|
||||
return fieldCollection; |
||||
} |
||||
} |
@ -0,0 +1,69 @@
|
||||
package com.fr.design.chartx.fields.diff; |
||||
|
||||
import com.fr.chartx.data.field.ColumnField; |
||||
import com.fr.chartx.data.field.diff.MultiCategoryColumnFieldCollection; |
||||
import com.fr.design.chartx.component.MultiComboBoxPane; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.JPanel; |
||||
import java.util.List; |
||||
|
||||
|
||||
/** |
||||
* Created by shine on 2019/4/10. |
||||
*/ |
||||
public class MultiCategoryDataSetFieldsPane extends AbstractDataSetFieldsWithCustomFieldPane<MultiCategoryColumnFieldCollection> { |
||||
|
||||
private MultiComboBoxPane multiCategoryPane; |
||||
|
||||
@Override |
||||
protected String[] fieldLabels() { |
||||
return new String[0]; |
||||
} |
||||
|
||||
@Override |
||||
protected UIComboBox[] filedComboBoxes() { |
||||
List<UIComboBox> list = initMultiCategoryPane().componentList(); |
||||
return list.toArray(new UIComboBox[list.size()]); |
||||
} |
||||
|
||||
private MultiComboBoxPane initMultiCategoryPane() { |
||||
if (multiCategoryPane == null) { |
||||
multiCategoryPane = new MultiComboBoxPane(); |
||||
} |
||||
return multiCategoryPane; |
||||
} |
||||
|
||||
@Override |
||||
protected JPanel createNorthPane() { |
||||
return initMultiCategoryPane(); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(MultiCategoryColumnFieldCollection ob) { |
||||
List<ColumnField> categoryList = ob.getCategoryList(); |
||||
|
||||
multiCategoryPane.populate(categoryList); |
||||
|
||||
populateCustomPane(ob); |
||||
} |
||||
|
||||
@Override |
||||
public MultiCategoryColumnFieldCollection updateBean() { |
||||
|
||||
MultiCategoryColumnFieldCollection columnFieldCollection = new MultiCategoryColumnFieldCollection(); |
||||
List<ColumnField> categoryList = columnFieldCollection.getCategoryList(); |
||||
|
||||
multiCategoryPane.update(categoryList); |
||||
|
||||
updateCustomPane(columnFieldCollection); |
||||
|
||||
return columnFieldCollection; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return StringUtils.EMPTY; |
||||
} |
||||
} |
@ -0,0 +1,56 @@
|
||||
package com.fr.design.chartx.single; |
||||
|
||||
import com.fr.chartx.data.CellDataDefinition; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.chartx.fields.AbstractCellDataFieldsPane; |
||||
import com.fr.design.i18n.Toolkit; |
||||
|
||||
import java.awt.BorderLayout; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/21. |
||||
*/ |
||||
public class CellDataPane extends FurtherBasicBeanPane<CellDataDefinition> { |
||||
|
||||
private AbstractCellDataFieldsPane cellDataFieldsPane; |
||||
|
||||
public CellDataPane(AbstractCellDataFieldsPane cellDataFieldsPane) { |
||||
initComps(cellDataFieldsPane); |
||||
} |
||||
|
||||
private void initComps(AbstractCellDataFieldsPane cellDataFieldsPane) { |
||||
this.cellDataFieldsPane = cellDataFieldsPane; |
||||
|
||||
this.setLayout(new BorderLayout()); |
||||
this.add(cellDataFieldsPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return Toolkit.i18nText("Fine-Design_Chart_Cell_Data"); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof CellDataDefinition; |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
this.removeAll(); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(CellDataDefinition ob) { |
||||
cellDataFieldsPane.populateBean(ob.getColumnFieldCollection()); |
||||
} |
||||
|
||||
@Override |
||||
public CellDataDefinition updateBean() { |
||||
CellDataDefinition cellDataDefinition = new CellDataDefinition(); |
||||
cellDataDefinition.setColumnFieldCollection(cellDataFieldsPane.updateBean()); |
||||
|
||||
return cellDataDefinition; |
||||
} |
||||
} |
@ -0,0 +1,121 @@
|
||||
package com.fr.design.chartx.single; |
||||
|
||||
import com.fr.chartx.data.DataSetDefinition; |
||||
import com.fr.data.impl.NameTableData; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane; |
||||
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
||||
import com.fr.design.gui.ilable.BoldFontTextLabel; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.design.mainframe.chart.gui.data.DatabaseTableDataPane; |
||||
import com.fr.design.utils.gui.UIComponentUtils; |
||||
|
||||
import java.awt.BorderLayout; |
||||
import java.awt.Dimension; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/21. |
||||
*/ |
||||
public class DataSetPane extends FurtherBasicBeanPane<DataSetDefinition> { |
||||
private static final int TABLE_DATA_LABEL_LINE_WRAP_WIDTH = 65; |
||||
private static final int TABLE_DATA_PANE_WIDTH = 246; |
||||
|
||||
private DatabaseTableDataPane tableDataPane; |
||||
|
||||
private AbstractDataSetFieldsPane dataSetFieldsPane; |
||||
|
||||
public DataSetPane(AbstractDataSetFieldsPane dataSetFieldsPane) { |
||||
initComps(dataSetFieldsPane); |
||||
} |
||||
|
||||
private void initComps(AbstractDataSetFieldsPane dataSetFieldsPane) { |
||||
UILabel label = new BoldFontTextLabel(Toolkit.i18nText("Fine-Design_Chart_Table_Data")); |
||||
UIComponentUtils.setLineWrap(label, TABLE_DATA_LABEL_LINE_WRAP_WIDTH); |
||||
UIComponentUtils.setPreferedWidth(label, ChartDataPane.LABEL_WIDTH); |
||||
|
||||
tableDataPane = new DatabaseTableDataPane(label) { |
||||
@Override |
||||
protected void userEvent() { |
||||
refreshBoxList(); |
||||
checkBoxUse(); |
||||
} |
||||
}; |
||||
tableDataPane.setPreferredSize(new Dimension(TABLE_DATA_PANE_WIDTH, tableDataPane.getPreferredSize().height)); |
||||
|
||||
this.dataSetFieldsPane = dataSetFieldsPane; |
||||
|
||||
this.setLayout(new BorderLayout()); |
||||
this.add(tableDataPane, BorderLayout.NORTH); |
||||
this.add(dataSetFieldsPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
/** |
||||
* 检查box是否可用. |
||||
*/ |
||||
public void checkBoxUse() { |
||||
TableDataWrapper dataWrap = tableDataPane.getTableDataWrapper(); |
||||
|
||||
if (dataSetFieldsPane != null) { |
||||
dataSetFieldsPane.checkBoxUse(dataWrap != null); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 刷新字段下拉列表 |
||||
*/ |
||||
private void refreshBoxList() { |
||||
TableDataWrapper dataWrap = tableDataPane.getTableDataWrapper(); |
||||
|
||||
if (dataWrap == null) { |
||||
return; |
||||
} |
||||
|
||||
List<String> columnNameList = dataWrap.calculateColumnNameList(); |
||||
|
||||
if (dataSetFieldsPane != null) { |
||||
dataSetFieldsPane.refreshBoxListWithSelectTableData(columnNameList); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public boolean accept(Object ob) { |
||||
return ob instanceof DataSetDefinition; |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return Toolkit.i18nText("Fine-Design_Chart_TableData"); |
||||
} |
||||
|
||||
@Override |
||||
public void reset() { |
||||
this.removeAll(); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(DataSetDefinition ob) { |
||||
refreshBoxList(); |
||||
checkBoxUse(); |
||||
|
||||
tableDataPane.populateBean(ob.getNameTableData()); |
||||
|
||||
dataSetFieldsPane.populateBean(ob.getColumnFieldCollection()); |
||||
} |
||||
|
||||
@Override |
||||
public DataSetDefinition updateBean() { |
||||
DataSetDefinition dataSetDefinition = new DataSetDefinition(); |
||||
|
||||
TableDataWrapper tableDataWrapper = tableDataPane.getTableDataWrapper(); |
||||
if (tableDataWrapper != null) { |
||||
dataSetDefinition.setNameTableData(new NameTableData(tableDataWrapper.getTableDataName())); |
||||
} |
||||
|
||||
dataSetDefinition.setColumnFieldCollection(dataSetFieldsPane.updateBean()); |
||||
|
||||
return dataSetDefinition; |
||||
} |
||||
} |
@ -0,0 +1,90 @@
|
||||
package com.fr.design.chartx.single; |
||||
|
||||
import com.fr.chartx.data.AbstractDataDefinition; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.beans.FurtherBasicBeanPane; |
||||
import com.fr.design.chartx.fields.AbstractCellDataFieldsPane; |
||||
import com.fr.design.chartx.fields.AbstractDataSetFieldsPane; |
||||
import com.fr.design.constants.LayoutConstants; |
||||
import com.fr.design.gui.frpane.UIComboBoxPane; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.mainframe.chart.gui.ChartDataPane; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JPanel; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Component; |
||||
import java.awt.Dimension; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by shine on 2019/5/21. |
||||
*/ |
||||
public class SingleDataPane extends BasicBeanPane<AbstractDataDefinition> { |
||||
|
||||
private UIComboBoxPane<AbstractDataDefinition> comboBoxPane; |
||||
|
||||
private DataSetPane dataSetPane; |
||||
|
||||
private CellDataPane cellDataPane; |
||||
|
||||
public SingleDataPane(AbstractDataSetFieldsPane dataSetFieldsPane, AbstractCellDataFieldsPane cellDataFieldsPane) { |
||||
initComps(dataSetFieldsPane, cellDataFieldsPane); |
||||
} |
||||
|
||||
private void initComps(AbstractDataSetFieldsPane dataSetFieldsPane, AbstractCellDataFieldsPane cellDataFieldsPane) { |
||||
|
||||
cellDataPane = new CellDataPane(cellDataFieldsPane); |
||||
dataSetPane = new DataSetPane(dataSetFieldsPane); |
||||
|
||||
comboBoxPane = new UIComboBoxPane<AbstractDataDefinition>() { |
||||
@Override |
||||
protected List<FurtherBasicBeanPane<? extends AbstractDataDefinition>> initPaneList() { |
||||
List<FurtherBasicBeanPane<? extends AbstractDataDefinition>> list = new ArrayList<FurtherBasicBeanPane<? extends AbstractDataDefinition>>(); |
||||
list.add(dataSetPane); |
||||
list.add(cellDataPane); |
||||
return list; |
||||
} |
||||
|
||||
protected void initLayout() { |
||||
this.setLayout(new BorderLayout(LayoutConstants.HGAP_LARGE, 6)); |
||||
JPanel northPane = new JPanel(new BorderLayout(LayoutConstants.HGAP_LARGE, 0)); |
||||
northPane.add(jcb, BorderLayout.CENTER); |
||||
UILabel label1 = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Data_Source")); |
||||
label1.setPreferredSize(new Dimension(ChartDataPane.LABEL_WIDTH, ChartDataPane.LABEL_HEIGHT)); |
||||
northPane.add(GUICoreUtils.createBorderLayoutPane(new Component[]{jcb, null, null, label1, null})); |
||||
northPane.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 8)); |
||||
this.add(northPane, BorderLayout.NORTH); |
||||
this.add(cardPane, BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
}; |
||||
|
||||
|
||||
this.setLayout(new BorderLayout()); |
||||
this.add(comboBoxPane, BorderLayout.CENTER); |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(AbstractDataDefinition ob) { |
||||
comboBoxPane.populateBean(ob); |
||||
} |
||||
|
||||
@Override |
||||
public AbstractDataDefinition updateBean() { |
||||
return comboBoxPane.updateBean(); |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return null; |
||||
} |
||||
} |
Loading…
Reference in new issue