2013-08-24 22 views
0

我有兩個類, ExistInsert.java和TryExist.java。對於ExistInsert完整的代碼下面給出:無法將列表值轉換爲JFreeChart的可比值

package tryexist; 
import java.util.ArrayList; 
import java.util.List; 
import org.exist.xmldb.XQueryService; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartFrame; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.category.DefaultCategoryDataset; 
import org.xmldb.api.DatabaseManager; 
import org.xmldb.api.base.Collection; 
import org.xmldb.api.base.Database; 
import org.xmldb.api.base.Resource; 
import org.xmldb.api.base.ResourceIterator; 
import org.xmldb.api.base.ResourceSet; 

public class ExistInsert { 
    public static String URI = "xmldb:exist://localhost:8899/exist/xmlrpc"; 
    public static String driver = "org.exist.xmldb.DatabaseImpl"; 
    public static List mylist = new ArrayList(); 

    public List insert_data(String xquery){ 
     try{ 

    Class c1 = Class.forName(driver); 
    Database database=(Database) c1.newInstance(); 
    String collectionPath= "/db"; 
    DatabaseManager.registerDatabase(database); 

    Collection col=DatabaseManager.getCollection(URI+collectionPath); 
    XQueryService service = (XQueryService) col.getService("XQueryService","1.0"); 
    service.setProperty("indent", "yes"); 
    ResourceSet result = service.query(xquery); 
    ResourceIterator i = result.getIterator();  

    while(i.hasMoreResources()){ 
     Resource r =i.nextResource(); 
     mylist.add(((String)r.getContent()));   
    } 
     } 
     catch(Exception e){ 
      System.out.println(e); 
     } 
     return mylist; 
     } 

    public void draw_bar(List values, List years){ 
     try{ 
      //DefaultPieDataset data = new DefaultPieDataset(); 
      DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 

      for(int j=0;j<values.size();j++){ 
       dataset.addValue(); 
      } 
      //JFreeChart chart = ChartFactory.createPieChart("TEST PEICHART", data, true, true, Locale.ENGLISH); 

      JFreeChart chart2 = ChartFactory.createLineChart("Assets", "X","Y",dataset , PlotOrientation.VERTICAL, true, true, true); 
      ChartFrame frame = new ChartFrame("TEST", chart2); 
      frame.setVisible(true); 
      frame.setSize(500, 500); 

     } 
      catch(Exception e){ 
       System.out.println(e); 
      } 
     } 
    } 

這裏的功能insert_data執行XQuery和結果返回到字符串列表。函數draw_bar使用參數viz值和年份作爲列表繪製條形圖。我面臨的主要問題是將List轉換爲Comparable,這是dataset.addValue()的要求。在我的主程序TryExist.java我:

package tryexist; 
import java.util.ArrayList; 
import java.util.List; 
public class Tryexist {  
    public static void main(String[] args) throws Exception{ 
     ExistInsert exist = new ExistInsert(); 
     String query = "Some query Here" 
     List resp = exist.insert_data(query); 
     List years = new ArrayList(); 
     for (int i=2060;i<=2064;i++){ 
      years.add(i); 
     } 
     System.out.println(years); 
     System.out.println(resp);   
     exist.draw_bar(resp,years);   
    }   
    } 

現在執行的查詢返回年,RESP爲[2060,2061,2062,2063,2064][32905657,3091102752,4756935449,7954664475,11668355950 ]。那麼如何在ExistInsert.java中編輯dataset.addValue(),以便我可以將上面獲得的值resp和years傳遞給draw_bar,以便爲傳遞的數據製作條形圖。

+1

這兩種方法的addValue [這裏記錄(http://www.jfree.org/jfreechart/api/gjdoc/org/jfree/data/category/DefaultCategoryDataset.html)不匹配您指定的簽名。您的列表包含什麼類型的值。爲什麼不使用泛型類型安全的集合('List '而不是'List'),爲什麼不尊重Java命名約定?爲什麼你想要*作爲第二和第三個參數傳遞?即什麼是表的第三行和第三列? –

回答

1

使用DefaultCategoryDataset, BarChartDemo1的完整示例包含在該分佈中,並在下面進行說明。點擊課程名稱即可查看source code。該示例使用String的實例作爲列和行密鑰,但可以使用任何Comparable,如here所述。

image http://i43.tinypic.com/55f3mo.png

+0

是的,我讀過程序和示例清楚地表明,字符串作爲addvalue()參數中的Comparable傳遞,但是當我嘗試將我的Year值解析爲String時,它生成錯誤,即我想傳遞dataset.addValue (字符串中的值[j],「年」,年[j]),但像整數一樣拋出錯誤不能轉換爲字符串。我在這做錯了什麼? – Pant

+0

請修改您的問題以包含顯示您描述的問題和錯誤的[sscce](http://sscce.org/)。 – trashgod

+0

我編輯了代碼並使其更加清晰。請檢查並建議我。 – Pant