パイプ沿いの圧力を表す配列の時間履歴があります。だから私は各デルタtのパイプの長さに沿って一連の圧力値を持っています。私はJFreeChartでパイプの長さに沿って圧力をプロットし、どのデルタをスライダでプロットするかを選択し、スライダを動かすたびにグラフィックが異なるデルタtの値で更新されるようにします。また、パイプの最後の部分の圧力になるようにタイルをリセットします。何が起こるかは、タイトルが更新であり、データが適切に更新されていることを意味しますが、曲線は変わりません。私はフォーラムですべての可能なトピックを読んで、私が考えることができるすべてを試しましたが、うまくいきません!次に、JPanelを拡張したクラスのコードを示します。jSlider1StateChangedメソッドはスライダ位置の変更を受け取り、createChartはプログラムの開始時に新しいチャートを作成し、dataSetGen(int ndt)はスライダの位置に基づいてグラフの新しいデータセットを生成します:グラフをJFreeChartとスライダで更新する
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<OutputPipeDt> 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<OutputPipeDt> 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;
}
}
データセットを変更するとグラフが再描画されると考えました。 もしコードがポストに載っているのが大きければ、私は正確に分かりにくい部分を貼り付けなければならないのか分かりません。
[sscce](http://sscce.org/)を含めるようにあなたの質問を編集してください。ガイダンスについては、[ダイヤルデモ](http://www.jfree.org/jfreechart/samples.html)を参照してください。私はこのためのGUIエディタを使用して_not_をお勧めしたいと思います。 – trashgod
私は3つの主な方法を編集して保存しました。 GUIエディタを使わずに試したところ、同じ結果でした。私も最初からやり直そうとしましたが、まだカーブに何も起こりません:( – Bernardoct
クロス投稿[ここ](http://www.jfree.org/forum/viewtopic.php?f=3&t=116429)。 – trashgod