package com.fr.plugin.pielinecomb.ui; import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; import com.fr.design.gui.frpane.AbstractAttrNoScrollPane; import com.fr.design.gui.frpane.AttributeChangeListener; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.extended.chart.ExtendedScrollPane; import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.plugin.pielinecomb.PieLineCombChart; import com.fr.plugin.pielinecomb.comp.CustomChartAxisButtonPane; import javax.swing.*; import java.awt.*; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class PieLineCombStyleAxisPane extends ExtendedScrollPane { private CustomChartAxisButtonPane axisButtonPane; private LinkedHashMap axisPaneMap = new LinkedHashMap<>();; private JPanel axisCardPane; private PieLineCombStylePane stylePane; public PieLineCombStyleAxisPane(PieLineCombStylePane stylePane) { this.stylePane = stylePane; } @Override protected JPanel createContentPane() { return new ContentPane(); } @Override public void populateBean(PieLineCombChart chart) { JSONObject chartConf = chart.getAxisConf(); if (null == axisPaneMap) { axisPaneMap = new LinkedHashMap<>(); } JSONObject axisX = chartConf.getJSONObject("axisX"); PieLineCombStyleAxisXPane axisXPane = new PieLineCombStyleAxisXPane(stylePane); axisXPane.populateBean(axisX); axisPaneMap.put(axisX.getString("axisName"), axisXPane); axisCardPane.add(axisXPane, axisX.getString("axisName")); JSONArray axisYList = chartConf.getJSONArray("axisY"); for (int i = 0; i < axisYList.size(); i++) { JSONObject axisY = axisYList.getJSONObject(i); PieLineCombStyleAxisYPane axisYPane = new PieLineCombStyleAxisYPane(stylePane); axisYPane.populateBean(axisY); axisPaneMap.put(axisY.getString("axisName"), axisYPane); axisCardPane.add(axisYPane, axisY.getString("axisName")); } axisButtonPane.populateBean(chartConf); } @Override public void updateBean(PieLineCombChart chart) { JSONObject chartConf = new JSONObject(); if (null != axisPaneMap && !axisPaneMap.isEmpty()) { Iterator it = axisPaneMap.keySet().iterator(); JSONArray axisY = JSONArray.create(); while(it.hasNext()) { String name = it.next(); if (name.startsWith("X")) { PieLineCombStyleAxisXPane xPane = (PieLineCombStyleAxisXPane)axisPaneMap.get(name); JSONObject axisXTmp = xPane.update(); axisXTmp.put("axisName", name); chartConf.put("axisX", axisXTmp); } else if (name.startsWith("Y")) { PieLineCombStyleAxisYPane yPane = (PieLineCombStyleAxisYPane)axisPaneMap.get(name); JSONObject axisYTmp = yPane.update(); axisYTmp.put("axisName", name); axisY.put(axisYTmp); } } chartConf.put("axisY", axisY); } chart.setAxisConf(chartConf); } @Override protected String title4PopupWindow() { return Toolkit.i18nText("Plugin-Pielinecomb-StyleAxisTitle"); } private class ContentPane extends JPanel { public ContentPane() { initComponents(); } private void initComponents() { this.setLayout(new BorderLayout()); JPanel mainPane = createMainPane(); JPanel axisPane = createAxisPane(); double p = TableLayout.PREFERRED; double f = TableLayout.FILL; Component[][] acomponents = new Component[][]{ new Component[]{mainPane}, new Component[]{axisPane} }; JPanel panel = TableLayoutHelper.createTableLayoutPane(acomponents, new double[]{p, p, p, p}, new double[]{f}); this.add(panel,BorderLayout.CENTER); this.setVisible(true); } } private JPanel createMainPane() { axisButtonPane = new CustomChartAxisButtonPane(this); return axisButtonPane; } private JPanel createAxisPane() { axisCardPane = new JPanel(new CardLayout()); // axisPaneMap = new LinkedHashMap<>(); // axisPaneMap.put("X轴", new PieLineCombStyleAxisXPane()); // axisPaneMap.put("Y轴", new PieLineCombStyleAxisYPane()); // Iterator it = axisPaneMap.keySet().iterator(); // while (it.hasNext()) { // String name = it.next(); // axisCardPane.add(axisPaneMap.get(name), name); // } ((CardLayout)axisCardPane.getLayout()).show(axisCardPane, "X轴"); return axisCardPane; } public void addAxisPane(String name) { axisPaneMap.put(name, new PieLineCombStyleAxisYPane(stylePane)); axisCardPane.add(axisPaneMap.get(name), name); } public void delAxisPane(String name) { axisPaneMap.remove(name); stylePane.attributeChanged(); } public void changeAxisSelected(String name) { ((CardLayout)axisCardPane.getLayout()).show(axisCardPane, name); } }