我有一個類JPanel
爲JFreeChart
。在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對象有一個* model *,如果這個模型有偵聽器,並且使用適當的setter方法修改模型,那麼偵聽器的方法就可以理解你的期望,但是你沒有。您正在創建一個全新的數據集對象,因此您無法按照您的設想工作。 –