2016-04-27 12 views
2

Wenn ich auf einen Abschnitt meines Kreisdiagramms klicke, möchte ich unter dem ersten Diagramm ein weiteres Diagramm (Liniendiagramm) sehen. Jetzt habe ich ein anderes Paneldiagramm erstellt, aber ich habe das erste Panel verloren, weil das zweite Diagramm auf das erste Panel und das zweite auf ein erstes Diagramm gemalt hat, das zweite jedoch eine schlechte Dimension; siehe Bild.Hinzufügen eines Liniendiagramms unter einem vorhandenen Kreisdiagramm

Wie kann ich mein Problem anpassen?

JFreeChart chart = ChartFactory.createPieChart("Pratiche complessive", 
      dataset, true, true, false); 
    ChartPanel chartPanel = new ChartPanel(chart); 
    chartPanel.setPreferredSize(new java.awt.Dimension(560, 370)); 
    PiePlot plot = (PiePlot) chart.getPlot(); 

    PieSectionLabelGenerator gen = new StandardPieSectionLabelGenerator(
      "{1} pratica/che"); 
    plot.setLabelFont(new Font("Courier New", Font.BOLD, 10)); 
    plot.setLabelLinkPaint(Color.BLACK); 
    plot.setLabelLinkStroke(new BasicStroke(1.0f)); 
    plot.setLabelOutlineStroke(null); 
    plot.setLabelPaint(Color.BLUE); 
    plot.setLabelBackgroundPaint(null); 
    plot.setLabelGenerator(gen); 
    chart.setBackgroundPaint(Color.orange); 
    chartPanel.addChartMouseListener(this); 
    this.setContentPane(chartPanel); 
} 

public void chartMouseClicked(ChartMouseEvent event) { 

    ChartEntity entity = event.getEntity(); 
    String sezione = ""; 
    sezione = entity.toString().substring(17); 
    sezione = sezione.replace(")", ""); 
    System.out.println(sezione); 
    // PieSection: 0, 0(ARCHIVIATO)===>ARCHIVIATO V 
    if (entity != null) { 

     try { 
      String query = query; 

      String numero_pratiche = ""; 
      String nome_stato = ""; 
      String data_modifica; 

      stmt = conn.prepareStatement(query); 
      rs = stmt.executeQuery(); 
      DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 
      while (rs.next()) { 
       dataset 
      } 
      // System.out.println(entity.toString()); 

      JFreeChart lineChart = ChartFactory.createLineChart("Pratiche", "Data", "Pratiche", dataset, PlotOrientation.VERTICAL,true, true, false); 
      ChartPanel pannello_dettaglio = new ChartPanel(lineChart); 
      pannello_dettaglio.setPreferredSize(new java.awt.Dimension(560,367)); 
      this.setContentPane(pannello_dettaglio); 
      JfreeChart dettaglio = new JfreeChart("Dettaglio"); 
      pannello_dettaglio.setSize(560, 367); 
      RefineryUtilities.centerFrameOnScreen(dettaglio); 
      dettaglio.setVisible(true); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

//first panel(piechart) 
    public static void main(String[] args) throws ClassNotFoundException, 
      SQLException { 
     JfreeChart demo = new JfreeChart("Pratiche complessive"); 
     demo.setSize(560, 367); 
     RefineryUtilities.centerFrameOnScreen(demo); 
     demo.setVisible(true); 

    } 

dies ist mein erstes Diagramm Pie: this is my first chart pie

Das ist mein Endergebnis: this is my final result

+0

Hat „unter“ bedeuten, von vorne nach hinten und oben - nach unten? – trashgod

+0

ich würde gerne eine panel chart von oben nach unten sehen – skatedan

Antwort

1

Ich mag würde ein Panel Diagramm von oben nach unten sehen.

Es sieht so aus, als ob Sie das gesamte Kreisdiagramm mit dem Liniendiagramm ersetzen. Fügen Sie stattdessen beide Diagrammbereiche hinzu und aktualisieren Sie den Datensatz des Liniendiagramms in ChartMouseListener. Das Horchliniendiagramm aktualisiert sich selbst als Antwort. Im Beispiel unten aktualisiert der Listener die Datenmenge des Liniendiagramms, um anzuzeigen, auf welchen Kreisabschnitt geklickt wurde.

image

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartMouseEvent; 
import org.jfree.chart.ChartMouseListener; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.entity.PieSectionEntity; 
import org.jfree.data.category.DefaultCategoryDataset; 
import org.jfree.data.general.DefaultPieDataset; 

/** @see http://stackoverflow.com/a/36889641/230513 */ 
public class PieLineTest { 

    private final DefaultCategoryDataset lineData = new DefaultCategoryDataset(); 

    public void display() { 
     final DefaultPieDataset pieData = new DefaultPieDataset(); 
     pieData.setValue("One", 42); 
     pieData.setValue("Two", 84); 
     JFreeChart pieChart = ChartFactory.createPieChart(
      "Title", pieData, true, true, false); 
     JFreeChart lineChart = ChartFactory.createLineChart(
      "Title", "Domain", "Range", lineData); 

     JFrame f = new JFrame("Test"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLayout(new GridLayout(0, 1)); 
     ChartPanel piePanel = new ChartPanel(pieChart) { 
      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(320, 240); 
      } 
     }; 
     piePanel.addChartMouseListener(new ChartMouseListener() { 
      @Override 
      public void chartMouseClicked(ChartMouseEvent cme) { 
       PieSectionEntity e = (PieSectionEntity) cme.getEntity(); 
       DefaultPieDataset d = (DefaultPieDataset) e.getDataset(); 
       Comparable sectionKey = e.getSectionKey(); 
       lineData.clear(); 
       lineData.addValue(1, e.toString(), "Begin"); 
       lineData.addValue(d.getValue(sectionKey), e.toString(), "End"); 
      } 

      @Override 
      public void chartMouseMoved(ChartMouseEvent event) { 
      } 
     }); 
     f.add(piePanel); 
     f.add(new ChartPanel(lineChart)); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new PieLineTest().display(); 
      } 
     }); 
    } 

} 
+0

oht, es ist fantastisch !!! während wenn ich Front-to-Back-Panel-Diagramm sehen möchte, was ich ändern muss? – skatedan

+1

Suchen Sie nach Beispielen, die [_overlaid_] sind (http://stackoverflow.com/search?tab=votes&q=%20%5bjfreechart%5d%20overlaid). – trashgod

Verwandte Themen