我使用代码来显示图表。 我想在此图表中显示一个按钮(显示详细信息),我将使用该按钮来呈现图表的一些细节。它是可实现的吗? 谢谢。
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);
}
}
答案 0 :(得分:2)
我以前从未这样做过,但原则上ChartPanel
从JPanel
延伸出来。因此,您可以使用setLayout()
方法并在图表中添加JButton
等组件。
但是,我认为这不是ChartPanel
的精神。图表本身不是由JComponent
组成的ChartPanel
。事实上,来自paintComponent()
的{{1}}方法(使用Java2D)绘制。因此,如果向面板添加按钮和组件,则无法根据图表正确控制其显示。特别是图表将始终显示在背景中,覆盖面板的整个空间。
我用JFreeCharts做了几次,并且效果很好,是使用弹出菜单。您可以使用ChartPanel
和getPopupMenu()
或setPopupMenu()
完全控制弹出菜单中的内容,JFreeCharts的默认菜单已经非常整洁。
或者,您可以在createPopupMenu()
容器中的图表旁边或旁边添加JButtons
。这是一个example。
答案 1 :(得分: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) {
}
});