为了显示图像像素的灰度直方图 我使用了对象“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/