2015-05-26 50 views
2

我使用了一個代碼來顯示一個圖。 我想在此圖中插入一個按鈕(顯示詳細信息),我將使用它來呈現關於該圖的一些細節。它是可實現的嗎? 謝謝。在JFreeChart圖中插入一個按鈕

if(jCheckBox3.isSelected()) { 
    try { 
     con = getConnection("jdbc:mysql://localhost:3306/base_rapport","root",""); 
     Statement statement = con.createStatement(rs.TYPE_FORWARD_ONLY,rs.CONCUR_READ_ONLY); 
     String sql3 = "Select Vendor, sum(Rate) as Rate from (select case Vendor when 'NSN' then 'Nokia' else Vendor end as Vendor, Rate from ( Select vendor ,(count(1))*100/(Select count(id_incident)from incident where open_time between '"+jTextField1.getText()+"' and'"+jTextField2.getText()+"' and vendor !='') as Rate from incident where open_time between '"+jTextField1.getText()+"'and'"+jTextField2.getText()+"' and vendor !='' group by upper(vendor)) as x) as y group by vendor"; 

     rs3 = statement.executeQuery(sql3); 
     DefaultPieDataset pieDataset = new DefaultPieDataset(); 

     while(rs3.next()) {  
      pieDataset.setValue(rs3.getString("vendor"),rs3.getDouble(2)); 
     } 

     JFreeChart chart = ChartFactory.createPieChart3D("Disfonctionnement par fournisseurs", pieDataset, true, true, true); 
     PiePlot3D piePlot3d = (PiePlot3D) chart.getPlot(); 
     piePlot3d.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}")); 
     fenetre fen3 = new fenetre(); 
     JPanel pnl = new JPanel(new BorderLayout()); 

     fen3.setContentPane(pnl); 
     fen3.setVisible(true); 
     fen3.setSize(500, 500); 
     ChartPanel cPanel1 = new ChartPanel(chart);  
     pnl.add(cPanel1); 
     File fichier = new File("C:\\Users\\alaeddine.zammeli.st\\Desktop\\résultat_application\\Répartition par fournisseur de '"+jTextField1.getText()+"' à '"+jTextField2.getText()+"'.png"); 

     try { 
      ChartUtilities.saveChartAsPNG(fichier, chart, 500, 500); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(this,e); 
    } 
} 

回答

2

我從來沒有這麼做過,但原則上ChartPanelJPanel延伸。因此,您可以使用setLayout()方法並將組件(如JButton)添加到圖表中。

不過,我認爲這不是ChartPanel的精神。圖表本身不是由JComponent組成,將被添加到ChartPanel。實際上,從ChartPanel(使用Java2D),通過paintComponent()方法得出得出。因此,如果您將按鈕和組件添加到面板中,您將無法正確控制其相對於圖表的顯示。特別是圖形將始終顯示在背景中,覆蓋面板的整個空間。

我用JFreeCharts做了幾次,而且工作得很好,就是使用彈出式菜單。您可以使用getPopupMenu()setPopupMenu()createPopupMenu()完全控制要在彈出式菜單中放入的內容,而JFreeCharts的默認菜單已經非常整齊。

或者,您可以在pnl容器旁邊或在圖表下方添加JButtons。這是example

2

ChartMouseListener添加到包含您的圖表的ChartPanel。您可以獲取有關被點擊的PieSectionEntity的詳細信息,如下所示。有關更多信息,請參閱toString()的實施PieSectionEntity。或者,您可以突出顯示實體,如here所示。

ChartPanel panel = new ChartPanel(chart); 
panel.addChartMouseListener(new ChartMouseListener() { 

    @Override 
    public void chartMouseClicked(ChartMouseEvent e) { 
     ChartEntity entity = e.getEntity(); 
     if (entity instanceof PieSectionEntity) { 
      PieSectionEntity pse = (PieSectionEntity) entity; 
      System.out.println(pse); 
     } 
    } 

    @Override 
    public void chartMouseMoved(ChartMouseEvent event) { 
    } 
}); 
相關問題