java - 如何更改 XYbarchart [jfreechart] 的默认颜色(红色)

标签 java jfreechart

为了显示图像像素的灰度直方图 我使用了对象“XYBARCHART”[JFreeChart] 我还使用了类别 XYSeriesCollection 和“XYItemRenderer”渲染器的数据集。 我用方法改变颜色:这个。 renderer1.setSeriesPaint (i2, Color.green) 但该系列仍保持粉红色(默认)。我想要的是,当我单击红色 Boutton 时,我会显示红色直方图,蓝色 Boutton 蓝色直方图显示 ..

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;

public class ImgHst implements ActionListener{

 private ParameterBlock imgParamBloc;
 private PlanarImage imgHistSrc  ;
 private Histogram imgHistogram;
 private int[] histValeurs;
 private int bandesCouleurs; //R;G;B
 private int maxHistValeurs;

    private ChartPanel myChartcontentPane;
    private JButton   redBtn,greenBtn,blueBtn;
    private XYSeriesCollection  ensHistg ;

    private JFrame frame;
    private JFreeChart myChart ;
    private XYSeries s,sred,sgreen,sblue;
    private XYPlot plot ;

    private  XYItemRenderer renderer0,renderer1,renderer2;


 ImgHst(PlanarImage img)
   {

     this.imgHistSrc =img ;
     imgHistogram  = new Histogram(256, 0, 255, 3); 
     this.histValeurs =imgHistogram .getBins(bandesCouleurs);
      maxHistValeurs= 0;
     for(int i=0;i<histValeurs.length;i++) maxHistValeurs = Math.max(maxHistValeurs,histValeurs[i]);
    imgParamBloc = new ParameterBlock();
    imgParamBloc.addSource(img);
    imgParamBloc.add(null);
    imgParamBloc.add(1);
    imgParamBloc.add(1);
    // création de l'histograme et remplissage du tableau des niveaux de gris 
    RenderedOp operateurHtg =  JAI.create("histogram", imgParamBloc, null);
    imgHistogram = (Histogram) operateurHtg.getProperty("histogram");
    createHstFrame();
  }
public void setImgSrc(PlanarImage img)
{
    imgHistSrc = img;
}
public Histogram   getMyHistogram()
{   
    return imgHistogram;
}
private XYSeries createSerie(int bande_couleur)
{
    XYSeries s = new XYSeries("S");
       for(int i=0;i < imgHistogram.getNumBins(bande_couleur);i++) 
       {
        s.add(i, imgHistogram.getBinSize(bande_couleur,i));
       }    
       return s;
}

public void setBandeCouleur(int b)
{
    this.bandesCouleurs =b;
}
public void createHstFrame()
 { 
      sred=createSerie(0);
      sgreen=createSerie(1);
      sblue=createSerie(2);


         myChart = ChartFactory.createXYBarChart("Histograme", "Intensité",false, "Nombre des Pixels",  ensHistg ,PlotOrientation.VERTICAL ,false,true,true);
         myChartcontentPane =new ChartPanel(myChart);
        // this.myChartcontentPane.setChart(ChartFactory.createXYBarChart("Histograme", "Intensité",false,"Nombre des Pixels", ensHistg,PlotOrientation.VERTICAL ,false,true,true));
          ChartUtilities.applyCurrentTheme(myChart);

         frame = new JFrame("");


     frame.add(myChartcontentPane);

    JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    redBtn = new JButton("Red");
    redBtn.addActionListener((ActionListener)this);
    panel.add(redBtn);
    greenBtn = new JButton("Green");
    greenBtn.addActionListener((ActionListener)this);
    panel.add(greenBtn);
    blueBtn = new JButton("Blue");
    blueBtn.addActionListener((ActionListener)this);
    panel.add(blueBtn);
    frame.add(panel, BorderLayout.SOUTH);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
//  return frame;
 }
public void createMyChart(XYSeries ss)
{      

         ensHistg  = new XYSeriesCollection(ss);
        myChartcontentPane.setChart(ChartFactory.createXYBarChart("Histograme", "Intensité",false, "Nombre des Pixels",  ensHistg,PlotOrientation.VERTICAL ,false,true,true));
        ChartUtilities.applyCurrentTheme(myChart);

         plot=    (XYPlot) myChart.getPlot();  
       ValueAxis xAxis =   plot.getDomainAxis();
      // ((ValueAxis) xAxis).setLowerBound(0);
     NumberAxis yAxis = (NumberAxis) plot.getRangeAxis();
      yAxis.setLowerBound(0);


        switch(this. bandesCouleurs)
        {
        case 0: 
                this. renderer0 =   plot.getRenderer() ;
                this. renderer0 =   plot.getRenderer() ;
                int i1 = ensHistg.indexOf(ss);

                this. renderer0.setSeriesPaint(i1, Color.green )    ;System.out.println(bandesCouleurs); 
                plot.setRenderer(   renderer0);
                break;

        case 1:  
                this. renderer1 =   plot.getRenderer() ;
                this. renderer1 =   plot.getRenderer() ;
               int i2 = ensHistg.indexOf(ss);
               this. renderer1.setSeriesPaint(i2, Color.green ) ;System.out.println(bandesCouleurs); 
               plot.setRenderer( renderer1);
                break;

        case 2 :this. renderer2 =  plot.getRenderer() ;
                this. renderer2 =  plot.getRenderer() ;
                this. renderer2.setSeriesPaint(0, Color.blue )  ;System.out.println(bandesCouleurs);
                plot.setRenderer(renderer2);
                break;
       }


        frame.add(myChartcontentPane);
        frame.repaint();

}
public void actionPerformed(ActionEvent cliquebtn) {


    if (cliquebtn.getSource().equals(redBtn))
    {
    setBandeCouleur(0);
    createMyChart(sred);
    }
    if (cliquebtn.getSource().equals(greenBtn))
    {
    setBandeCouleur(1);
    createMyChart(sgreen);

    }
    if (cliquebtn.getSource().equals(blueBtn))
    {   setBandeCouleur(2); 
        createMyChart(sblue);
    }
    }

最佳答案

您的 createMyChart() 方法有这一行,它将一个新图表分配给 ChartPanel,但它与您在 中引用的图表对象不同我的图表字段:

    myChartcontentPane.setChart(ChartFactory.createXYBarChart("Histograme", "Intensité",false, "Nombre des Pixels",  ensHistg,PlotOrientation.VERTICAL ,false,true,true));

关于java - 如何更改 XYbarchart [jfreechart] 的默认颜色(红色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176784/

相关文章:

java - 数字时钟背后的真正代码是什么? java

java - JFreeChart:在 XYLineChart 轴上添加自定义字符串刻度

java - JFreeChart 使 XYSeriescollection 可迭代

jasper-reports - 碧 Jade 报告 : How to mask or filter the labels at the chart's axis

java - jfreechart - 为每个饼图自定义饼图标签

java - 按索引从周期序列 0,1,2,3,2,1,0,1... 获取值的最简单方法是什么?

java - 发布到特定线程

java - Glassfish SSE 未成功将事件发送到浏览器 EventSource(最新的 Chrome)

java - 如何将 arraylist 中的 59 个元素分组为一个元素?

java - 在 JFreeChart 中使线条颜色与点分开