2016-04-27 67 views
2

當我點擊我的餅圖的一部分時,我希望在第一個圖表下看到另一個圖表(折線圖)。現在我生成了另一個面板圖表,但是我失去了第一個面板,因爲第二個圖表在第一個面板上繪製,第二個繪製第一個圖表,但第二個繪製了不好的維度;見圖片。在現有的餅圖下方添加折線圖

我該如何調整我的問題?

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); 

    } 

這是我的第一個圖表派: this is my first chart pie

這是我的最終結果: this is my final result

+0

是否「下」的意思是從前到後或頂部 - 至底部? – trashgod

+0

我希望看到一個面板圖從上到下 – skatedan

回答

1

我希望看到一個面板榜前至底部。

它看起來像用折線圖面板替換整個餅圖面板。相反,請添加兩個圖表面板並更新折線圖的數據集ChartMouseListener。聆聽折線圖將自動更新。在下面的示例中,偵聽器更新折線圖的數據集以反映點擊了哪個餅圖部分。

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,這太棒了!而如果我想看到前後面板圖表,我必須改變? – skatedan

+1

查找[_overlaid_]的示例(http://stackoverflow.com/search?tab=votes&q=%20%5bjfreechart%5d%20overlaid)。 – trashgod