1

我有两个课程,即。ExistInsert.java 和 TryExist.java 。ExistInsert 的完整代码如下:

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 并将结果返回到 String 列表中。函数 draw_bar 使用参数即值和年份作为列表绘制条形图。我面临的主要问题是将 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() 以便我可以将上面获得的值和年份分别传递给 draw_bar 来为传递的数据制作条形图。?

4

1 回答 1

2

使用DefaultCategoryDataset, BarChartDemo1, 的完整示例包含在分发中,并在下面进行了说明。点击类名查看源代码。该示例使用 的实例String作为列和行键,但Comparable可以使用任何实例,如此所述。

图片

于 2013-08-25T01:07:40.393 回答