1

私は2つのクラスを持っています。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 を実行し、結果を文字列のリストに返します。関数 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 と年を draw_bar に渡して、渡されたデータの棒グラフを作成するにはどうすればよいですか?

4

1 に答える 1

2

DefaultCategoryDataset、を使用した完全な例BarChartDemo1は、配布物に含まれており、以下に示されています。クラス名をクリックすると、ソース コードが表示されます。この例ではString、列キーと行キーとしてのインスタンスを使用していますが、ここでComparable説明されているように、任意のインスタンスを使用できます。

画像

于 2013-08-25T01:07:40.393 に答える