帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

231 lines
8.3 KiB

package com.fr.design.mainframe.chart.gui.style;
import com.fr.base.ChartColorMatching;
import com.fr.base.ChartPreStyleConfig;
import com.fr.base.Utils;
import com.fr.chart.base.AttrFillStyle;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.base.ChartUtils;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.style.background.gradient.FixedGradientBar;
import com.fr.stable.StringUtils;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
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.Iterator;
/**
* 图表配色(各个系列, 预定义风格设置) 颜色设置.
* @author kunsnat E-mail:kunsnat@gmail.com
* @version 创建时间:2013-8-20 下午05:10:54
*/
public class ChartFillStylePane extends BasicBeanPane<AttrFillStyle>{
protected UIComboBox styleSelectBox;
protected JPanel customPane;
protected JPanel changeColorSetPane;
protected FixedGradientBar colorGradient;
protected CardLayout cardLayout;
protected UIButton accButton;
protected UIButton gradientButton;
protected ChartAccColorPane colorAcc;
public ChartFillStylePane() {
this.setLayout(new BorderLayout());
styleSelectBox = new UIComboBox(getNameObj());
customPane = new JPanel(FRGUIPaneFactory.createBorderLayout());
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.LEFT));
buttonPane.add(accButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Acc_Set")));
buttonPane.add(gradientButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Gradient_Color")));
customPane.add(buttonPane, BorderLayout.NORTH);
changeColorSetPane = new JPanel(cardLayout = new CardLayout());
changeColorSetPane.add(colorGradient = new FixedGradientBar(4, 130), "gradient");
changeColorSetPane.add(colorAcc = new ChartAccColorPane(), "acc");
cardLayout.show(changeColorSetPane, "acc");
customPane.add(changeColorSetPane, BorderLayout.CENTER);
customPane.setVisible(false);
accButton.setSelected(true);
initListener();
initLayout();
}
private void initListener() {
styleSelectBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
customPane.setVisible(styleSelectBox.getSelectedIndex() == styleSelectBox.getItemCount() - 1);
}
});
accButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
accButton.setSelected(true);
gradientButton.setSelected(false);
cardLayout.show(changeColorSetPane, "acc");
}
});
gradientButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
gradientButton.setSelected(true);
accButton.setSelected(false);
cardLayout.show(changeColorSetPane, "gradient");
}
});
}
protected void initLayout() {
customPane.setPreferredSize(new Dimension(200, 100));
colorGradient.setPreferredSize(new Dimension(120, 30));
this.setLayout(new BorderLayout());
this.add(getContentPane(),BorderLayout.CENTER);
}
protected JPanel getContentPane () {
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double[] columnSize = { f };
double[] rowSize = { p, p};
Component[][] components = new Component[][]{
new Component[]{styleSelectBox},
new Component[]{customPane}
} ;
return TableLayoutHelper.createTableLayoutPane4Chart(new String[]{"ColorMatch"},components,rowSize,columnSize);
}
@Override
public Dimension getPreferredSize() {
if(styleSelectBox.getSelectedIndex() != styleSelectBox.getItemCount() - 1) {
return new Dimension(styleSelectBox.getPreferredSize().width, 50);
}
return super.getPreferredSize();
}
@Override
protected String title4PopupWindow() {
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Color");
}
private String[] getNameObj() {
ChartPreStyleConfig config = ChartPreStyleConfig.getInstance();
ArrayList<String> nameArr = new ArrayList<String>();
nameArr.add(com.fr.design.i18n.Toolkit.i18nText("FR-Designer_DEFAULT"));
Iterator keys = config.names();
while (keys.hasNext()) {
Object key = keys.next();
nameArr.add(Utils.objectToString(key));
}
nameArr.add(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom"));
return nameArr.toArray(new String[nameArr.size()]);
}
@Override
public void populateBean(AttrFillStyle condition) {
String fillStyleName = condition == null? "" : condition.getFillStyleName();
if(StringUtils.isBlank(fillStyleName)){//兼容处理
if(condition == null || condition.getColorStyle() == ChartConstants.COLOR_DEFAULT) {
styleSelectBox.setSelectedIndex(0);//默认
colorAcc.populateBean(ChartConstants.CHART_COLOR_ARRAY);// 新建时 保持默认样式
accButton.setSelected(true);
gradientButton.setSelected(false);
cardLayout.show(changeColorSetPane, "acc");
colorGradient.getSelectColorPointBtnP1().setColorInner(Color.WHITE);
colorGradient.getSelectColorPointBtnP2().setColorInner(Color.black);// 控件中的位置无效.
} else {
styleSelectBox.setSelectedIndex(styleSelectBox.getItemCount() - 1);
int colorStyle = condition.getColorStyle();
gradientButton.setSelected(colorStyle == ChartConstants.COLOR_GRADIENT);
accButton.setSelected(colorStyle == ChartConstants.COLOR_ACC);
int colorSize = condition.getColorSize();
if(colorSize == 2 && gradientButton.isSelected() ) {
cardLayout.show(changeColorSetPane, "gradient");
Color endColor = condition.getColorIndex(1);
Color startColor = condition.getColorIndex(0);
colorGradient.getSelectColorPointBtnP1().setColorInner(startColor);
colorGradient.getSelectColorPointBtnP2().setColorInner(endColor);
colorGradient.repaint();
} else if(colorSize > 2 && accButton.isSelected()){
cardLayout.show(changeColorSetPane, "acc");
Color[] colors = new Color[colorSize];
for(int i = 0; i < colorSize; i++) {
colors[i] = condition.getColorIndex(i);
}
colorAcc.populateBean(colors);
}
}
}else{
styleSelectBox.setSelectedItem(fillStyleName);
}
}
@Override
public AttrFillStyle updateBean() {
AttrFillStyle condition = new AttrFillStyle();
condition.clearColors();
if(styleSelectBox.getSelectedIndex() == 0) {
condition.setColorStyle(ChartConstants.COLOR_DEFAULT);
} else if(styleSelectBox.getSelectedIndex() < styleSelectBox.getItemCount() - 1){
ChartPreStyleConfig manager = ChartPreStyleConfig.getInstance();
Object preStyle = manager.getPreStyle(styleSelectBox.getSelectedItem());
if (preStyle instanceof ChartColorMatching) {
AttrFillStyle def = ChartUtils.chartColorMatching2AttrFillStyle((ChartColorMatching) preStyle);
def.setFillStyleName(Utils.objectToString(styleSelectBox.getSelectedItem()));
return def;
}else{
condition.setColorStyle(ChartConstants.COLOR_DEFAULT);
}
} else {
condition.setCustomFillStyle(true);
if(gradientButton.isSelected()) {
condition.setColorStyle(ChartConstants.COLOR_GRADIENT);
Color start = colorGradient.getSelectColorPointBtnP1().getColorInner();
Color end = colorGradient.getSelectColorPointBtnP2().getColorInner();
condition.addFillColor(start);
condition.addFillColor(end);
} else {
condition.setColorStyle(ChartConstants.COLOR_ACC);
Color[] colors = colorAcc.updateBean();
for(int i = 0, length = colors.length; i < length; i++) {
condition.addFillColor(colors[i]);
}
}
}
return condition;
}
}