【问题标题】:Insert a button into a JFreeChart graph在 JFreeChart 图中插入一个按钮
【发布时间】:2015-05-26 14:09:33
【问题描述】:

我使用代码来显示图表。 我想在此图中插入一个按钮(显示详细信息),我将使用该按钮来显示有关该图的一些详细信息。它可以实现吗? 谢谢。

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

【问题讨论】:

    标签: java swing charts jfreechart


    【解决方案1】:

    ChartMouseListener 添加到包含您的图表的ChartPanel。您可以获取有关单击的PieSectionEntity 的详细信息,如下所示。有关更多信息,请参阅 PieSectionEntity 中的 toString() 的实现。或者,您可以突出显示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) {
        }
    });
    

    【讨论】:

      【解决方案2】:

      我以前从未这样做过,但原则上ChartPanel 扩展自JPanel。因此,您可以使用 setLayout() 方法并向图表添加组件,例如 JButton

      但是,我认为这不是ChartPanel 的精神。图表本身不是由将添加到ChartPanelJComponents 组成的。事实上,它是由来自ChartPanelpaintComponent() 方法绘制(使用Java2D)。因此,如果您将按钮和组件添加到面板,您将无法正确控制它们相对于图表的显示。特别是图表将始终显示在背景中,覆盖面板的整个空间。

      我用 JFreeCharts 做过几次,而且效果很好,就是使用弹出菜单。您可以使用getPopupMenu()setPopupMenu()createPopupMenu() 完全控制在弹出菜单中放置的内容,并且JFreeCharts 的默认菜单已经非常简洁了。

      或者,您可以在 pnl 容器中的图表旁边或下方添加 JButtons。这是example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 2017-06-28
        相关资源
        最近更新 更多