Менять цвета гистограммы JFreeChart динамически?

Я пытаюсь показать гистограмму изображения и показать только некоторые цвета. Я уже сделал это с помощью JFreeChart и createXYLineChart и получения всех данных путем итерации по всем пикселям.

Чтобы ускорить это, я пытаюсь сделать это с помощью «createHistogram». Я следовалэтот код.

Чтобы обновить диаграмму новыми значениями, я использовал эти два метода:

XYPlot plot = (XYPlot) chart.getPlot();
plot.setDataset(setHistogram(red, green, blue));

Будучи setHistogram, это метод, который возвращает HistogramDataset в зависимости от того, какой флажок активирован (булево красный, зеленый и синий).

Это работает правильно, как задумано.

Второе, что я должен сделать при обновлении, это обновить цвета каждой серии, так как в противном случае они получают значение по умолчанию. Я сделал это, следуя более или менее той же процедуре, что и со значениями:

private void setHistogramColors(boolean red, boolean green, boolean blue) {
    XYPlot plot = (XYPlot) chart.getPlot();
    XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer();
    renderer.setBarPainter(new StandardXYBarPainter());
    Paint[] paintArray = null;
    if (red) {
        if (green) {
            if (blue) {
                paintArray = new Paint[3];
                paintArray[0] = new Color(0x80ff0000, true);// translucent red, green & blue
                paintArray[1] = new Color(0x8000ff00, true);
                paintArray[2] = new Color(0x800000ff, true);
            } else {
                paintArray = new Paint[2];
                paintArray[0] = new Color(0x80ff0000, true);
                paintArray[1] = new Color(0x8000ff00, true);
            }
        } else {
            paintArray = new Paint[1];
            paintArray[0] = new Color(0x80ff0000, true);
        }
    } else if (green) {
        if (blue) {
            paintArray = new Paint[2];
            paintArray[0] = new Color(0x8000ff00, true);
            paintArray[1] = new Color(0x800000ff, true);
        } else {
            paintArray = new Paint[1];
            paintArray[0] = new Color(0x8000ff00, true);
        }
    } else if (blue){
        paintArray = new Paint[1];
        paintArray[0] = new Color(0x800000ff, true);
    }
    else {
        return;
    }
    plot.setDrawingSupplier(new DefaultDrawingSupplier(
            paintArray,
            DefaultDrawingSupplier.DEFAULT_FILL_PAINT_SEQUENCE,
            DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,
            DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,
            DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,
            DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE));
}

Но то, что я вижу, работает только тогда, когда я рисую код в первый раз, а следующие сюжеты разных серий будут иметь одинаковые цвета. Вот пример, RGB - это цвет, которым они должны быть: [ Когда я обновляюсь, красный цвет переходит к зеленой гистограмме, а зеленый к синей:

Есть ли способ исправить это?

Ответы на вопрос(1)

Ваш ответ на вопрос