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

标签 java swing mouseevent jfreechart desktop

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

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

有人可以帮助我如何单击图表上的一个栏来打开新框架或任何新窗口或图表吗?

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

谢谢大家

应用程序屏幕截图

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

enter image description here

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

enter image description here

//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,您可以使用它来访问 rowKeycolumnKey数据集。然后您可以打开一个对话框或选项卡来显示找到的数据。

关于Java Swing Clickable JFree Charts,单击每个条形图或饼图即可打开新框架或新图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28899094/

相关文章:

java - java中如何查看函数使用的内存

java - Log4j2 基于属性禁用附加程序

java - 设置作为另一个对象的子对象的对象的字段值

java - 在 JProgressBar 顶部显示 JPanel

javascript - 随着鼠标位置改变不透明度

css - 当 CSS 可见属性为 false 时,Firefox 中的控件是否会接收鼠标事件?

java - 如何在 JTabbedPane 的选项卡之间共享 Java 信息

java - 如何让 JButton 切换 JPanel 并关闭 JFrame?

另一个类中的Java actionListener不会打开窗口

c++ - 在qt中获取标签的鼠标点击位置