JFreeChart
の場合、JPanel
を拡張するクラスがあります。 setMean()
の内部では、dataset
またはFunction2D
の値を更新しようとしましたが、repaint()
であってもグラフ上で何も変わりません。JFreeChartでJTextFieldを使用して正規分布グラフを更新します。
public class JFreeChartPanel extends JPanel {
Function2D normal = new NormalDistributionFunction2D(0.0, 3.0);
XYDataset dataset = DatasetUtilities.sampleFunction2D(normal, -5.0, 5.0, 100, "Normal");
double mean = 0.0, std = 1.0;
public double getMean() {
return mean;
}
public void setMean(double mean) {
this.mean = mean;
normal = new NormalDistributionFunction2D(mean,std);
dataset = DatasetUtilities.sampleFunction2D(normal, -5.0, 5.0, 100, "Normal");
repaint();
}
public double getStd() {
return std;
}
public void setStd(double std) {
this.std = std;
}
public JFreeChartPanel(){
JFreeChart chart = ChartFactory.createXYLineChart(
"Normal Distribution",
"X",
"Y",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
final ChartPanel chartPanel = new ChartPanel(chart);
setLayout(new BorderLayout());
add(chartPanel);
}
}
これは私のJTextField
の値を変更するたびに実行されます。
public void updateMean()
{
String meanS = mean.getText();
double mean = 0.0;
try{
mean = Double.parseDouble(meanS);
System.out.println("Mean: "+mean);
jFreeChartPanel.setMean(mean);
}catch(Exception e){
System.out.println("Mean: incorrect input");
}
}
あなたは、データセットが保持している値を変更していますがはJFreeChartチャートを変更することはありません、魔法のように自身で変更するつもりはありません。私はJFreeChartを使用しませんが、表示されたチャートのメソッドを呼び出すことができるかどうか、または新しいデータで新しいメソッドを作成する必要があるかどうかをAPIで確認する必要があります。 –
@HovercraftFullOfEels私が読んだ限り、JFreeChartにはたくさんのリスナーがありますので、変更は自動的にグラフに反映されるはずです。 – Higeath
リスナーの仕組みを理解していない - 設定する必要があります。リスナーを機能させるために配線してください。はい、データセットオブジェクトを使用してJFreeChartオブジェクトを作成しますが、データセットを後で変更するだけでJFreeChartオブジェクトには影響しません。 JFreeChartオブジェクトには*モデル*があり、このモデルにリスナーがあり、適切なセッターメソッド、つまりリスナーを移動するメソッドを使用してモデルを変更すると、私はあなたの期待を理解することができました。まったく新しいデータセットオブジェクトを作成しているので、想定している通りに動作するとは限りません。 –