2014-01-07 26 views
0

朋友們,在我的應用程序中,我正在使用swingworker爲服務器計數器生成jfreechart。爲此,值在X,Y軸上變化,但圖表不顯示。我的代碼有問題嗎?請檢查它的朋友..圖表不顯示,但在jfreechart中的值更改?

而在「x,y」軸顯示浮點值,但從散列圖實際檢索值是int。如果我正在使用,

Plot.getRangeAxis()。setStandardTickUnits(NumberAxis.createIntegerTickUnits());

意思是,在Y軸只顯示當前值而沒有其附近的值。請解決朋友的兩個問題。我的圖形編碼是,

try 
    { 

     System.out.println("Graph Occur"); 

     MySQLClass.GraphLock=false; 
     Panel1.removeAll(); 
     XYDataset Dataset; 
     TimeSeries Series = new TimeSeries("Random Data"); 
     Second sec = new Second(); 
     ChartPanel CPanel; 
     if(Operation_Combo.getSelectedItem().toString().equals("MySQL")) 
     { 
     if(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+"").equals(null)) 
     { 
      Value = 0; 
     } 
     else 
     { 
      Value = Integer.parseInt(MySQLClass.Map_MySql.get(""+MainWindow.SelectedNode+"")); 
     } 
     System.out.println(Value); 
     } 
     if(Operation_Combo.getSelectedItem().toString().equals("SQL Server")) 
     { 
     if(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+"").equals(null)) 
     { 
      Value = 0; 
     } 
     else 
     { 
      Value = Integer.parseInt(SqlServerClass.Map_SQLServer.get(""+MainWindow.SelectedNode+"")); 
     } 
     System.out.println(Value); 
     } 
     String CounterName = MainWindow.SelectedNode.toString(); 
     Series.add(sec, Value); 
     Dataset = new TimeSeriesCollection(Series); 
     Chart = ChartFactory.createTimeSeriesChart(CounterName, "Time", "Range", Dataset, true, false, false); 
     XYPlot Plot = (XYPlot)Chart.getPlot(); 
     // Plot.getRangeAxis().setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 

     CPanel = new ChartPanel(Chart); 
     Panel1.revalidate(); 
     Panel1.add(CPanel); 
     Panel1.setBackground(Color.white); 
     System.out.println("Chart Added"); 
     Panel1.validate(); 

     Thread.sleep(MainWindow.Intervel * 1000); 
     System.out.println("Sleep="+(MainWindow.Intervel * 1000)); 
     CPanel.repaint(); 
     System.gc(); 
     if(Operation_Combo.getSelectedItem().toString().equals("MySQL")) 
     { 
     MySQLClass.SQLLock=true; 
     new MySQLClass().execute(); 
     } 
     if(Operation_Combo.getSelectedItem().toString().endsWith("SQL Server")) 
     { 
     SqlServerClass.SQLServerLock=true; 
     new SqlServerClass().execute(); 
     } 

    } 

而結果是,。

enter image description here

在此先感謝。

+0

您已經張貼同樣的片段[這裏](http://stackoverflow.com/q/20884694/230513)和[這裏](http://stackoverflow.com/q/20944719/230513),無試圖按照這樣的方法建議:_不要在美國東部時間睡覺; _do_參見[Swing中的併發](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 – trashgod

+0

我剛剛通過使用那個迴轉工人得到了解決方案。問題是爲什麼圖表不顯示在這裏,但X,Y軸的值在每次迭代中都會改變。我想知道我的代碼中有什麼缺陷。 –

+0

無論你是更新這個問題,還是選擇提出一個新問題,請包括一個[sscce](http://sscce.org/),它展示了你描述的問題和採取的方法。 – trashgod

回答

1

您已經創建了包含單個數據項的數據集。如果將渲染器設置爲在每個數據點處顯示形狀,則會在圖表中間看到單個項目。沒有線路,因爲您至少需要兩個數據點進行連接。

也許你把這個代碼在一些環和期望看到多個項目......但在這種情況下,你不應該建立在每次新的數據集和一個新的圖表。

+0

在我的應用程序中,我只是從樹中選擇一個節點。對於那個節點,我只是在每次迭代中從hashmap檢索數據並將其放入數據集中。其實我只有一個價值。我應該怎麼做才能在這裏顯示jfreechart。 @david gilbert –

+0

如果你只有一個數據項,那麼我會使用ChartFactory.createXYBarChart(...)創建圖表。請注意,還有一個附加參數用於指示您是否想要x軸的DateAxis或NumberAxis。 –

+0

而對於你的y軸,因爲只有一個值,所以JFreeChart很難知道在y軸上顯示的範圍。所以你應該手動設置它,或者調用axis.setAutoRangeMinimumSize(2)...使用任何最小尺寸給你你想要的結果。 –