0

I am building an application to check the similiairity between two java codes or more. Now, I have a data that I am store into a table. The code to build this table like this

public final class ASTParseUnit {

String IDLexer;

public ASTParseUnit(final IParserSelector parserSelector) {
    this.parserSelector = parserSelector;
}

public String getIDLexer() {
    return IDLexer;
}

public void setIDLexer(String iDLexer) {
    IDLexer = iDLexer;
}

public ASTManager parse(final JCCDFile[] files) {

    final ASTManager container = new ASTManager(
            TipeNode.PROJECT.getTipe(), null);


    JCCDFile temp;
    temp = files[0];
    String name = temp.getName(); 
    String idLexerSeleksi = "";

    StringBuilder nameOfFileMainFile = new StringBuilder();

    StringBuilder countLevenstheins = new StringBuilder();
    StringBuilder countJaccards = new StringBuilder();
    StringBuilder countCosines = new StringBuilder();


    for (final JCCDFile file : files) {
        container.tandaiNodeRoot(); 

        parseTree(file, container);
        if (name.equals(file.getName())) {
            idLexerSeleksi = getIDLexer();
        }

        LevenshteinDistance lv = new LevenshteinDistance();
        SimilarityRunner sr = new SimilarityRunner(); // my class to count similiarity

        if (idLexerSeleksi != getIDLexer()) {

            nameOfFileMainFile.append(file.getName()); 
            System.out.println(temp.getName() + " ==> " + file.getName());



            countLevenstheins.append(lv.printDistance(idLexerSeleksi, getIDLexer()));
            countJaccards.append(sr.hitungJaccard(idLexerSeleksi, getIDLexer()));
            countCosines.append(sr.hitungCosine(idLexerSeleksi, getIDLexer()));

        }
    }

    String enemy = nameOfMainFile.toString();
    String resultOfLevenstheins = countLevenstheins.toString();
    String resultOfJaccards = countJaccards.toString();
    String resultOfCosines = countCosines.toString();

    DefaultTableModel model = (DefaultTableModel) Main_Menu.jTable3.getModel();
    List<Report3> theListData = new ArrayList<Report3>();
    Report3 persentaseTabel = new Report3();

    persentaseTabel.setMainFile(name);
    persentaseTabel.setComparingFile(enemy);
    persentaseTabel.setLevenstheins(resultOfLevenstheins);
    persentaseTabel.setJaccard(resultOfJaccards);
    persentaseTabel.setCosine(resultOfCosines);

    theListData.add(persentaseTabel);
    for (Report3 report3 : theListData) {
        model.addRow(new Object[]{
            report3.getMainFile(),
            report3.getComparingFile(),
            report3.getLevenstheins(),
            report3.getJaccard(),
            report3.getCosine(),});
    }

    return container;
}

Now, How can I representation that table into a jfreeChart ? This is my jfreechart code...

public class LayeredBarChartDemo11 extends ApplicationFrame {

public LayeredBarChartDemo11(String s) {
    super(s);


    CategoryDataset dataset = createDataset();
    JFreeChart chart = createChart(dataset);
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    setContentPane(chartPanel);
    chartPanel.setMouseWheelEnabled(true);

    //Main_menu is my form
    Main_Menu.presentase.removeAll();
    Main_Menu.presentase.setLayout(new java.awt.BorderLayout());
    Main_Menu.presentase.add(chartPanel);
}

private static CategoryDataset createDataset() {
    String s = "Levensthein";
    String s1 = "Jaccard";
    String s2 = "Cosine";
    String s3 = "a.java";
    String s4 = "b.java";
    String s5 = "c.java";

    DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
    defaultcategorydataset.addValue(100D, s, s3);
    defaultcategorydataset.addValue(20, s1, s3);

    defaultcategorydataset.addValue(40D, s, s4);
    defaultcategorydataset.addValue(170, s, s5);
    defaultcategorydataset.addValue(69, s1, s4);
    defaultcategorydataset.addValue(51, s1, s5);
    defaultcategorydataset.addValue(32, s2, s3);
    defaultcategorydataset.addValue(87, s2, s4);
    defaultcategorydataset.addValue(68, s2, s5);
    defaultcategorydataset.addValue(89, s2, s4);
    defaultcategorydataset.addValue(8, s2, s5);
    return defaultcategorydataset;
}

private static JFreeChart createChart(CategoryDataset categorydataset) {
    JFreeChart jfreechart = ChartFactory.createBarChart("Persentase Kemiripan", "File Pembanding", "File Utama", categorydataset, PlotOrientation.HORIZONTAL, true, true, false);
    CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
    categoryplot.setDomainGridlinesVisible(true);
    categoryplot.setRangePannable(true);
    categoryplot.setRangeZeroBaselineVisible(true);
    categoryplot.configureRangeAxes();
    NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
    numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    LayeredBarRenderer layeredbarrenderer = new LayeredBarRenderer();
    layeredbarrenderer.setDrawBarOutline(false);
    categoryplot.setRenderer(layeredbarrenderer);
    categoryplot.setRowRenderingOrder(SortOrder.DESCENDING);
    GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue, 0.0F, 0.0F, new Color(0, 0, 64));
    GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 64, 0));
    GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(64, 0, 0));
    layeredbarrenderer.setSeriesPaint(0, gradientpaint);
    layeredbarrenderer.setSeriesPaint(1, gradientpaint1);
    layeredbarrenderer.setSeriesPaint(2, gradientpaint2);
    return jfreechart;
}

public static JPanel createDemoPanel() {
    JFreeChart jfreechart = createChart(createDataset());
    ChartPanel chartpanel = new ChartPanel(jfreechart);
    chartpanel.setMouseWheelEnabled(true);
    return chartpanel;
}

This is my screenshot of my application https://www.dropbox.com/s/opmao5l9sy0df8v/New%20Picture%20%2810%29.png

halfer
  • 19,824
  • 17
  • 99
  • 186
user2971238
  • 95
  • 1
  • 2
  • 9

1 Answers1

1

Assuming that you want the chart to reflect the (possibly changing) table entries, add a TableModelListener to your TableModel. Based on the TableModelEvent received, update the CategoryDataset accordingly; the listening chart will update itself in response.

If the table model does not change after the query and comparison functions are evaluated, use JDBCCategoryDataset, mentioned here, to query the database; then construct the corresponding table model.

Community
  • 1
  • 1
trashgod
  • 203,806
  • 29
  • 246
  • 1,045
  • See also [`XYDatasetTableModel`](http://www.jfree.org/jfreechart/api/javadoc/org/jfree/data/xy/XYDatasetTableModel.html). – trashgod Jun 28 '14 at 11:16