Java Swing Clickable JFree Charts,点击每个条形图或饼图打开新框架或新图表

Java Swing Clickable JFree Charts, clicked each bar chart or pie chart to open new frame or new charts

我正在为我的最后一年项目制作一个基于 java swing 的桌面应用程序。我创建了从我的数据库连接的不同类型的图表。

现在想让这个仪表板更具交互性,当单击每个栏时,我想进一步向下钻取以打开另一个图表或框架或 table 以获取详细信息。

任何人都可以帮助我如何点击图表上的栏以打开新框架或任何新的 window 或图表?

下面是我的应用程序屏幕截图以及我的一个图表的代码。

谢谢大家

应用程序的屏幕截图

http://www.tiikoni.com/tis/view/?id=3b425ff

http://www.tiikoni.com/tis/view/?id=4336ceb

//For the Bar Chart
private void lineChart() {
    // *************** ADDING BAR CHART FROM DATABASE *****************************

    try {
        String sql = "select Region, Male, Female from ObeseLondon limit 14";
        JDBCCategoryDataset dataset = new JDBCCategoryDataset(MySQL.Connectdb(), sql);
        JFreeChart chart = ChartFactory.createBarChart("", "Town", "No. Of Obese People", dataset, PlotOrientation.HORIZONTAL, true, true, true);
        chart.setBackgroundPaint(Color.white);
        BarRenderer render = null;
        //CategoryPlot plot = null;
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        plot.getRenderer().setSeriesPaint(0, Color.green);
        plot.getRenderer().setSeriesPaint(1, Color.yellow);
        render = new BarRenderer();

        org.jfree.chart.ChartFrame chartframe = new org.jfree.chart.ChartFrame("Query Chart", chart);
        //chartframe.setVisible(true);
        //chartframe.setSize(200,500);
        panelBarChart.setLayout(new java.awt.BorderLayout());
        ChartPanel chartPanel = new ChartPanel(chart);
        panelBarChart.add(chartPanel);
        panelBarChart.validate();

    //****** Trying Button Click Action for bar chart ********
    /*
    chart.addChangeListener(chartPanel);
    chartPanel.addChartMouseListener(new ChartMouseListener() {
    public void chartMouseMoved(ChartMouseEvent e) {
       }

    @Override
    public void chartMouseClicked(ChartMouseEvent e) {
     new JOptionPane().showMessageDialog(null, "You have clicked the bar chart", "Hello", JOptionPane.OK_OPTION);

    }
    });
 */
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }      

您需要将 ChartMouseListener 添加到您的 chartPanel

chartPanel.addChartMouseListener(new ChartMouseListener() {

    @Override
    public void chartMouseClicked(ChartMouseEvent event) {
        ChartEntity entity = event.getEntity();
        System.out.println(entity);
    }

    @Override
    public void chartMouseMoved(ChartMouseEvent event) {
    }
});

ChartEntity 将是一个 CategoryItemEntity,您可以使用它来访问 rowKeycolumnKeydataset。然后你可以打开一个对话框或选项卡来显示找到的数据。