2016-04-27 7 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