Java柱状图怎么显示数据表?

在Java中使用JFreeChart库创建柱状图时,可通过ChartFactory的createBarChart方法设置参数,并在plot对象中调用setDataset方法绑定数据表,最后用ChartPanel将图表嵌入Swing界面实现可视化展示。

在Java中为柱状图添加数据表能直观呈现数值细节,提升数据可视化效果,下面详细介绍使用主流库JFreeChart实现柱状图与数据表联动显示的完整方案:


核心实现原理

通过JFreeChart生成柱状图,利用CategoryTable组件创建数据表格,结合ChartCompositeJScrollPane实现图表和表格的联动展示。
关键类说明

  • DefaultCategoryDataset:存储柱状图数据
  • JFreeChart:核心图表对象
  • CategoryTable:表格渲染器
  • ChartComposite:图表显示容器

环境准备

  1. 添加Maven依赖

    <dependency>
     <groupId>org.jfree</groupId>
     <artifactId>jfreechart</artifactId>
     <version>1.5.3</version>
    </dependency>
    <dependency>
     <groupId>org.jfree</groupId>
     <artifactId>jcommon</artifactId>
     <version>1.0.24</version>
    </dependency>
  2. 手动下载
    JFreeChart官网 | JCommon库


分步实现代码

步骤1:创建数据集

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(12000, "销售额", "1月");
dataset.addValue(18000, "销售额", "2月");
dataset.addValue(9000, "销售额", "3月");

步骤2:生成柱状图

JFreeChart chart = ChartFactory.createBarChart(
    "2025年季度销售统计",  // 标题
    "月份",              // X轴标签
    "金额(元)",        // Y轴标签
    dataset,             // 数据源
    PlotOrientation.VERTICAL,
    true, true, false    // 显示图例/提示/URL
);
// 自定义样式
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setRangeGridlinePaint(Color.GRAY);

步骤3:创建数据表

String[] columns = {"月份", "销售额"};
CategoryTable table = new CategoryTable(dataset, columns);
JTable dataTable = table.createTable();

步骤4:整合显示组件

public static void displayChartAndTable() {
    JFrame frame = new JFrame("柱状图数据表联动");
    frame.setLayout(new BorderLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // 添加图表
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new Dimension(600, 400));
    frame.add(chartPanel, BorderLayout.NORTH);
    // 添加表格(带滚动条)
    JScrollPane tableScrollPane = new JScrollPane(dataTable);
    tableScrollPane.setPreferredSize(new Dimension(600, 150));
    frame.add(tableScrollPane, BorderLayout.SOUTH);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

效果说明

最终界面分为上下两部分:

  • 上半部分:动态交互柱状图(支持缩放、平移)
  • 下半部分:可滚动数据表格
    Java柱状图怎么显示数据表?
    (示意图:柱状图+数据表格联动显示)

完整代码示例

import org.jfree.chart.*;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.ui.CategoryTable;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.swing.*;
import java.awt.*;
public class ChartWithTableExample {
    public static void main(String[] args) {
        // 1. 创建数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(12000, "Sales", "Jan");
        dataset.addValue(18000, "Sales", "Feb");
        dataset.addValue(9000, "Sales", "Mar");
        // 2. 生成柱状图
        JFreeChart chart = ChartFactory.createBarChart(
            "2025 Q1 Sales Report", "Month", "Amount (¥)",
            dataset, PlotOrientation.VERTICAL, true, true, false
        );
        customizeChart(chart);
        // 3. 创建数据表
        String[] headers = {"Month", "Sales Amount"};
        CategoryTable tableModel = new CategoryTable(dataset, headers);
        JTable dataTable = new JTable(tableModel);
        // 4. 显示界面
        showUI(chart, dataTable);
    }
    private static void customizeChart(JFreeChart chart) {
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.WHITE);
        plot.setRangeGridlinePaint(Color.LIGHT_GRAY);
        chart.getTitle().setFont(new Font("微软雅黑", Font.BOLD, 16));
    }
    private static void showUI(JFreeChart chart, JTable table) {
        JFrame frame = new JFrame("Chart with Data Table");
        frame.setLayout(new BorderLayout());
        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new Dimension(700, 400));
        frame.add(chartPanel, BorderLayout.CENTER);
        JScrollPane tablePane = new JScrollPane(table);
        tablePane.setPreferredSize(new Dimension(700, 150));
        frame.add(tablePane, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

进阶优化方案

  1. 数据动态更新

    // 更新数据集后刷新组件
    dataset.addValue(21000, "Sales", "Apr");
    chartPanel.repaint();
    ((AbstractTableModel) dataTable.getModel()).fireTableDataChanged();
  2. 导出功能

    // 保存为PNG
    ChartUtils.saveChartAsPNG(new File("chart.png"), chart, 800, 600);
  3. 样式美化

    • 使用ChartFactory.setChartTheme()应用统一主题
    • 修改柱子颜色:plot.getRenderer().setSeriesPaint(0, Color.BLUE)

常见问题解决

  • 表格不显示:检查JScrollPane是否正确包裹JTable
  • 中文乱码:设置字体 chart.getTitle().setFont(new Font("宋体", Font.PLAIN, 12))
  • 依赖冲突:确保jfreechart与jcommon版本匹配

引用说明:本文代码基于JFreeChart 1.5.3官方文档实现,参考资源:
JFreeChart Developer Guide
Oracle Java Swing Tutorial
数据可视化最佳实践参考《Data Visualization with Java》

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/9676.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月1日 21:14
下一篇 2025年6月1日 21:22

相关推荐

  • JavaEE代码注释最佳实践是什么

    Java EE中注释代码主要使用单行注释(//)和多行注释(/*…*/),Javadoc注释(/**…*/)用于生成API文档,合理注释可提升代码可读性和可维护性。

    2025年6月6日
    100
  • Java如何实现页面搜索功能?

    在Java中实现页面搜索功能,通常结合前端传递关键词,后端通过Spring Boot框架接收请求,利用JPA或MyBatis操作数据库进行模糊查询(如SQL的LIKE语句),最后将匹配结果返回页面渲染展示,核心步骤包括参数接收、数据库查询和结果返回。

    2025年6月12日
    100
  • Java如何输入整数?

    在Java中录入整数通常使用Scanner类,首先导入java.util.Scanner,创建Scanner对象关联System.in,再调用nextInt()方法读取用户输入的整数值,Scanner sc = new Scanner(System.in); int num = sc.nextInt();

    2025年6月15日
    100
  • Java基础如何快速入门

    学习Java基础入门:先安装JDK和开发工具(如IDEA),掌握基本语法(变量、数据类型、运算符、流程控制),重点理解面向对象核心概念(类、对象、封装、继承、多态),并通过编写简单程序和小项目实践巩固。

    2025年6月7日
    100
  • Java画圆时如何详细计算坐标点步骤?

    Java中画圆通常使用中点画圆算法或Bresenham算法,通过圆的八分对称性,只需计算1/8圆弧的点坐标,再对称映射到其他象限,算法以圆心和半径为基础,利用判别式递推确定每个像素点位置,实现高效绘制。

    2025年6月1日
    300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN