forked from fanruan/design
Browse Source
* commit '4fd2434ae255cce8d815da2805411e7f9112a34c': REPORT-11155 10.0 丢失功能点补充 static方法拿出来 国际化 update CHART-2912 && CHART-2969 扩展接口 自定义字段名 REPORT-11257 修改数据面板research/10.0
ju
6 years ago
14 changed files with 679 additions and 175 deletions
@ -0,0 +1,84 @@
|
||||
package com.fr.design.mainframe.chart.gui.data.table; |
||||
|
||||
import com.fr.data.util.function.DataFunction; |
||||
import com.fr.data.util.function.NoneFunction; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.mainframe.chart.gui.data.CalculateComboBox; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.log.FineLoggerFactory; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Created by shine on 2018/9/14. |
||||
*/ |
||||
public class DataPaneHelper { |
||||
/** |
||||
* 刷新Box的选项. |
||||
*/ |
||||
public static void refreshBoxItems(UIComboBox box, List list) { |
||||
if (box == null) { |
||||
return; |
||||
} |
||||
|
||||
Object ob = box.getSelectedItem(); |
||||
box.removeAllItems(); |
||||
|
||||
int length = list.size(); |
||||
for (int i = 0; i < length; i++) { |
||||
box.addItem(list.get(i)); |
||||
} |
||||
|
||||
box.getModel().setSelectedItem(ob); |
||||
} |
||||
|
||||
/** |
||||
* 清空box里所有东西 |
||||
* |
||||
* @param box 容器 |
||||
*/ |
||||
public static void clearBoxItems(UIComboBox box) { |
||||
if (box != null) { |
||||
box.removeAllItems(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 根据公式 获取 公式组件下拉框选项 |
||||
* |
||||
* @param function |
||||
* @return |
||||
*/ |
||||
public static String getFunctionString(DataFunction function) { |
||||
for (int i = 0; i < CalculateComboBox.CLASS_ARRAY.length; i++) { |
||||
Class tmp = function.getClass(); |
||||
if (ComparatorUtils.equals(tmp, CalculateComboBox.CLASS_ARRAY[i])) { |
||||
return CalculateComboBox.CALCULATE_ARRAY[i]; |
||||
} |
||||
} |
||||
return CalculateComboBox.CALCULATE_ARRAY[0]; |
||||
} |
||||
|
||||
/** |
||||
* 根据公式组件下拉选中项 获取对应公式 |
||||
* |
||||
* @param name |
||||
* @return |
||||
*/ |
||||
public static DataFunction getFunctionByName(String name) { |
||||
int index = 0; |
||||
for (int i = 0; i < CalculateComboBox.CALCULATE_ARRAY.length; i++) { |
||||
if (ComparatorUtils.equals(name, CalculateComboBox.CALCULATE_ARRAY[i])) { |
||||
index = i; |
||||
} |
||||
} |
||||
try { |
||||
return (DataFunction) CalculateComboBox.CLASS_ARRAY[index].newInstance(); |
||||
} catch (InstantiationException e) { |
||||
FineLoggerFactory.getLogger().error("Function Error"); |
||||
} catch (IllegalAccessException e) { |
||||
FineLoggerFactory.getLogger().error("Function Error"); |
||||
} |
||||
return new NoneFunction(); |
||||
} |
||||
} |
@ -0,0 +1,380 @@
|
||||
package com.fr.extended.chart; |
||||
|
||||
import com.fr.base.Utils; |
||||
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.data.CalculateComboBox; |
||||
import com.fr.design.mainframe.chart.gui.data.table.DataPaneHelper; |
||||
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. |
||||
*/ |
||||
public class ExtendedCustomFieldComboBoxPane extends UIComboBoxPane<AbstractDataConfig> { |
||||
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 UseFieldValuePane useFieldValuePane; |
||||
private CustomFieldNamePane 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(82, 20)); |
||||
northPane.add(label, BorderLayout.WEST); |
||||
this.add(northPane, BorderLayout.NORTH); |
||||
this.add(cardPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
@Override |
||||
protected List<FurtherBasicBeanPane<? extends AbstractDataConfig>> initPaneList() { |
||||
useFieldValuePane = new UseFieldValuePane(); |
||||
customFieldNamePane = new CustomFieldNamePane(); |
||||
List<FurtherBasicBeanPane<? extends AbstractDataConfig>> list = new ArrayList<FurtherBasicBeanPane<? extends AbstractDataConfig>>(); |
||||
list.add(useFieldValuePane); |
||||
list.add(customFieldNamePane); |
||||
return list; |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return StringUtils.EMPTY; |
||||
} |
||||
|
||||
public void checkBoxUse(boolean hasUse) { |
||||
jcb.setEnabled(hasUse); |
||||
useFieldValuePane.checkBoxUse(hasUse); |
||||
} |
||||
|
||||
public void clearAllBoxList() { |
||||
useFieldValuePane.clearAllBoxList(); |
||||
fieldList.clear(); |
||||
} |
||||
|
||||
protected void refreshBoxListWithSelectTableData(List columnNameList) { |
||||
useFieldValuePane.refreshBoxListWithSelectTableData(columnNameList); |
||||
fieldList = columnNameList; |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(AbstractDataConfig ob) { |
||||
if (ob.isCustomName()) { |
||||
customFieldNamePane.populateBean(ob); |
||||
jcb.setSelectedIndex(1); |
||||
} else { |
||||
useFieldValuePane.populateBean(ob); |
||||
jcb.setSelectedIndex(0); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void updateBean(AbstractDataConfig ob) { |
||||
if (jcb.getSelectedIndex() == 0) { |
||||
ob.setCustomName(false); |
||||
useFieldValuePane.updateBean(ob); |
||||
} else { |
||||
ob.setCustomName(true); |
||||
customFieldNamePane.updateBean(ob); |
||||
} |
||||
} |
||||
|
||||
private class UseFieldValuePane extends FurtherBasicBeanPane<AbstractDataConfig> { |
||||
private UIComboBox series; |
||||
private UIComboBox value; |
||||
private CalculateComboBox function; |
||||
|
||||
private UseFieldValuePane() { |
||||
initComponents(); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
|
||||
series = new UIComboBox(); |
||||
value = 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 = {76, 120}; |
||||
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); |
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(AbstractDataConfig ob) { |
||||
List<ExtendedField> list = ob.getCustomFields(); |
||||
if (list.size() == 2) { |
||||
series.setSelectedItem(list.get(0).getFieldName()); |
||||
value.setSelectedItem(list.get(1).getFieldName()); |
||||
function.populateBean((AbstractDataFunction) list.get(1).getDataFunction()); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void updateBean(AbstractDataConfig ob) { |
||||
List<ExtendedField> list = new ArrayList<ExtendedField>(); |
||||
|
||||
list.add(new ExtendedField(Utils.objectToString(series.getSelectedItem()))); |
||||
ExtendedField field = new ExtendedField(Utils.objectToString(value.getSelectedItem())); |
||||
field.setDataFunction(function.updateBean()); |
||||
list.add(field); |
||||
|
||||
ob.setCustomFields(list); |
||||
} |
||||
|
||||
@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 AbstractDataConfig updateBean() { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
private class CustomFieldNamePane extends FurtherBasicBeanPane<AbstractDataConfig> { |
||||
|
||||
private UICorrelationPane correlationPane; |
||||
|
||||
public CustomFieldNamePane() { |
||||
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); |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void populateBean(AbstractDataConfig ob) { |
||||
List<ExtendedField> customFields = ob.getCustomFields(); |
||||
|
||||
List<Object[]> list = new ArrayList<Object[]>(); |
||||
for (ExtendedField field : customFields) { |
||||
String[] array = {field.getFieldName(), field.getCustomName(), DataPaneHelper.getFunctionString(field.getDataFunction())}; |
||||
list.add(array); |
||||
} |
||||
correlationPane.populateBean(list); |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void updateBean(AbstractDataConfig ob) { |
||||
List<Object[]> list = correlationPane.updateBean(); |
||||
|
||||
List<ExtendedField> customFields = new ArrayList<ExtendedField>(); |
||||
for (Object[] line : list) { |
||||
ExtendedField field = new ExtendedField(Utils.objectToString(line[0])); |
||||
field.setCustomName(Utils.objectToString(line[1])); |
||||
if (line.length > 2) { |
||||
field.setDataFunction(DataPaneHelper.getFunctionByName(Utils.objectToString(line[2]))); |
||||
} |
||||
customFields.add(field); |
||||
} |
||||
|
||||
ob.setCustomFields(customFields); |
||||
|
||||
} |
||||
|
||||
@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 AbstractDataConfig 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; |
||||
} |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue