Обновить график с помощью JFreeChart и слайдера
У меня есть история времени для массивов, описывающих давление вдоль трубы. Таким образом, у меня есть массив значений давления по длине трубы для каждой дельты т. Я хочу нанести значения давления по длине трубы с помощью JFreeChart и выбрать, какая дельта t будет отображаться с помощью ползунка, чтобы всякий раз, когда пользователь перемещает ползунок, изображение обновлялось значениями из другой дельты. Я'm также сбрасывает плитку на давление в последней части трубы. Что происходит, так это то, что заголовок обновляется, это означает, что данные корректно обновляются, но кривая остается неизменной. Я прочитал все возможные темы на форумах и перепробовал все, что мог придумать, но этоне работает! Вот'Это код моего класса, который расширяет JPanel, в котором метод jSlider1StateChanged слышит об изменении положения ползунка, createChart создает новую диаграмму при запуске программы, а dataSetGen (int ndt) создает графикs новый набор данных на основе положения ползунка:
public class MyMainPanel extends JPanel {
private JFreeChart jc;
private OutputPipe op;
private DefaultXYDataset ds;
private javax.swing.JFrame jFrame1;
private javax.swing.JSlider jSlider1;
private pipevisualizer.MyChartPanel pnlChartPanel;
private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {
int ndt = ((JSlider) evt.
getSource()).
getValue();
System.out.println("Slider1: " + ((JSlider) evt.
getSource()).
getValue());
dataSetGen(ndt);
int a = 0;
jc.fireChartChanged();
}
private void dataSetGen(int ndt) {
ArrayList opDtArray = op.getOpLit();
OutputPipeDt opDt = opDtArray.get(ndt);
double[] H = opDt.getH();
double[] l = new double[H.length];
double[] p = new double[H.length];
double dX = op.getPipeLength() / H.length;
double slope = op.getPipeSlope();
double el = op.getPipeUSElev();
for (int i = 0; i < H.length; i++) {
l[i] = dX * i;
p[i] = el - dX * slope * i;
}
double[][] dataH = new double[2][H.length];
dataH[0] = l;
dataH[1] = H;
double[][] dataP = new double[2][H.length];
dataP[0] = l;
dataP[1] = p;
ds = new DefaultXYDataset();
ds.addSeries("pipe head", dataH);
ds.addSeries("pipe profile", dataP);
jc.setTitle("H[end] = " + Double.toString(dataH[1][l.length - 1]));
jc.fireChartChanged();
}
private JFreeChart createChart(OutputPipe op, int ndt) {
ArrayList opDtArray = op.getOpLit();
OutputPipeDt opDt = opDtArray.get(ndt);
double[] H = opDt.getH();
double[] l = new double[H.length];
double[] p = new double[H.length];
double dX = op.getPipeLength() / H.length;
double slope = op.getPipeSlope();
double el = op.getPipeUSElev();
for (int i = 0; i < H.length; i++) {
l[i] = dX * i;
p[i] = el - dX * slope * i;
}
double[][] dataH = new double[2][H.length];
dataH[0] = l;
dataH[1] = H;
double[][] dataP = new double[2][H.length];
dataP[0] = l;
dataP[1] = p;
DefaultXYDataset ds = new DefaultXYDataset();
ds.addSeries("pipe head", dataH);
ds.addSeries("pipe profile", dataP);
JFreeChart chart = ChartFactory.createXYLineChart(
"t = " + Double.toString(op.getOpLit().get(ndt).getT()),
// chart title
"X",
// x axis label
"Y",
// y axis label
ds,
// data
PlotOrientation.VERTICAL,
true,
// include legend
true,
// tooltips
false // urls
);
return chart;
}
}
Я думал, что любые изменения в наборах данных приведут к перерисовке графика. Извините, если код может быть слишком большим, чтобы быть на почте, но я нене знаю точно, какие части я должен вставить, чтобы быть более или менее ясным.