java中怎么生成表格图表

发布时间:2021-06-30 17:43:01 作者:Leah
来源:亿速云 阅读:1000

Java中怎么生成表格图表

在Java中生成表格和图表是数据可视化的常见需求。无论是用于数据分析、报告生成,还是用户界面展示,表格和图表都能有效地传达信息。本文将详细介绍如何在Java中生成表格和图表,涵盖多种工具和库的使用方法,并提供丰富的代码示例。

目录

  1. 引言
  2. 生成表格
  3. 生成图表
  4. 综合应用
  5. 总结

引言

在Java中生成表格和图表是数据可视化的关键步骤。表格用于展示结构化数据,而图表则用于展示数据的趋势和关系。Java提供了多种工具和库来生成表格和图表,包括Swing、Apache POI、JFreeChart、XChart和JavaFX等。本文将详细介绍这些工具的使用方法,并提供丰富的代码示例。

生成表格

使用Java Swing生成表格

Java Swing是Java的标准GUI工具包,提供了丰富的组件来构建用户界面。JTable是Swing中用于展示表格数据的组件。

示例代码

import javax.swing.*;
import java.awt.*;

public class SwingTableExample {
    public static void main(String[] args) {
        // 创建表格数据
        Object[][] data = {
            {"1", "John", "Doe", 28},
            {"2", "Jane", "Doe", 24},
            {"3", "Bob", "Smith", 32}
        };

        // 创建表头
        String[] columnNames = {"ID", "First Name", "Last Name", "Age"};

        // 创建JTable
        JTable table = new JTable(data, columnNames);

        // 创建JScrollPane并将JTable放入其中
        JScrollPane scrollPane = new JScrollPane(table);

        // 创建JFrame并设置布局
        JFrame frame = new JFrame("Swing Table Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        // 将JScrollPane添加到JFrame中
        frame.add(scrollPane, BorderLayout.CENTER);

        // 设置JFrame大小并显示
        frame.setSize(400, 300);
        frame.setVisible(true);
    }
}

运行结果

运行上述代码将显示一个包含表格数据的窗口,表格中展示了ID、First Name、Last Name和Age四列数据。

使用Apache POI生成Excel表格

Apache POI是一个用于操作Microsoft Office文档的Java库,支持Excel、Word和PowerPoint等格式。使用Apache POI可以生成Excel表格并保存为文件。

示例代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelTableExample {
    public static void main(String[] args) throws IOException {
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();

        // 创建工作表
        Sheet sheet = workbook.createSheet("Sheet1");

        // 创建表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("ID");
        headerRow.createCell(1).setCellValue("First Name");
        headerRow.createCell(2).setCellValue("Last Name");
        headerRow.createCell(3).setCellValue("Age");

        // 创建数据行
        Object[][] data = {
            {"1", "John", "Doe", 28},
            {"2", "Jane", "Doe", 24},
            {"3", "Bob", "Smith", 32}
        };

        for (int i = 0; i < data.length; i++) {
            Row row = sheet.createRow(i + 1);
            for (int j = 0; j < data[i].length; j++) {
                row.createCell(j).setCellValue(data[i][j].toString());
            }
        }

        // 调整列宽
        for (int i = 0; i < 4; i++) {
            sheet.autoSizeColumn(i);
        }

        // 保存工作簿到文件
        try (FileOutputStream fileOut = new FileOutputStream("workbook.xlsx")) {
            workbook.write(fileOut);
        }

        // 关闭工作簿
        workbook.close();
    }
}

运行结果

运行上述代码将生成一个名为workbook.xlsx的Excel文件,文件中包含一个名为Sheet1的工作表,表格中展示了ID、First Name、Last Name和Age四列数据。

使用JFreeChart生成表格

JFreeChart是一个用于生成图表的Java库,但它也提供了生成表格的功能。通过DefaultTableModelJTable,可以在JFreeChart中生成表格。

示例代码

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

import javax.swing.*;
import java.awt.*;

public class JFreeChartTableExample extends ApplicationFrame {
    public JFreeChartTableExample(String title) {
        super(title);

        // 创建表格数据
        Object[][] data = {
            {"1", "John", "Doe", 28},
            {"2", "Jane", "Doe", 24},
            {"3", "Bob", "Smith", 32}
        };

        // 创建表头
        String[] columnNames = {"ID", "First Name", "Last Name", "Age"};

        // 创建JTable
        JTable table = new JTable(data, columnNames);

        // 创建JScrollPane并将JTable放入其中
        JScrollPane scrollPane = new JScrollPane(table);

        // 创建JFreeChart图表
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(28, "Age", "John");
        dataset.addValue(24, "Age", "Jane");
        dataset.addValue(32, "Age", "Bob");

        JFreeChart chart = ChartFactory.createBarChart(
                "Age Chart", // 图表标题
                "Name", // 类别轴标签
                "Age", // 值轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                true, // 是否显示图例
                true, // 是否生成工具提示
                false // 是否生成URL链接
        );

        // 创建ChartPanel并将图表放入其中
        ChartPanel chartPanel = new ChartPanel(chart);

        // 设置布局
        setLayout(new BorderLayout());

        // 将JScrollPane和ChartPanel添加到窗口中
        add(scrollPane, BorderLayout.NORTH);
        add(chartPanel, BorderLayout.CENTER);

        // 设置窗口大小并显示
        pack();
        RefineryUtilities.centerFrameOnScreen(this);
        setVisible(true);
    }

    public static void main(String[] args) {
        JFreeChartTableExample example = new JFreeChartTableExample("JFreeChart Table Example");
        example.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

运行结果

运行上述代码将显示一个窗口,窗口顶部是一个表格,展示了ID、First Name、Last Name和Age四列数据,窗口底部是一个柱状图,展示了每个人的年龄。

生成图表

使用JFreeChart生成图表

JFreeChart是一个功能强大的Java图表库,支持多种图表类型,包括柱状图、折线图、饼图等。

示例代码

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class JFreeChartExample extends ApplicationFrame {
    public JFreeChartExample(String title) {
        super(title);

        // 创建数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(28, "Age", "John");
        dataset.addValue(24, "Age", "Jane");
        dataset.addValue(32, "Age", "Bob");

        // 创建柱状图
        JFreeChart chart = ChartFactory.createBarChart(
                "Age Chart", // 图表标题
                "Name", // 类别轴标签
                "Age", // 值轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                true, // 是否显示图例
                true, // 是否生成工具提示
                false // 是否生成URL链接
        );

        // 创建ChartPanel并将图表放入其中
        ChartPanel chartPanel = new ChartPanel(chart);

        // 设置布局
        setLayout(new BorderLayout());

        // 将ChartPanel添加到窗口中
        add(chartPanel, BorderLayout.CENTER);

        // 设置窗口大小并显示
        pack();
        RefineryUtilities.centerFrameOnScreen(this);
        setVisible(true);
    }

    public static void main(String[] args) {
        JFreeChartExample example = new JFreeChartExample("JFreeChart Example");
        example.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

运行结果

运行上述代码将显示一个窗口,窗口中展示了一个柱状图,图表中展示了John、Jane和Bob的年龄。

使用XChart生成图表

XChart是一个轻量级的Java图表库,支持多种图表类型,包括折线图、柱状图、饼图等。

示例代码

import org.knowm.xchart.*;
import org.knowm.xchart.style.Styler;

import javax.swing.*;
import java.awt.*;
import java.util.Arrays;

public class XChartExample {
    public static void main(String[] args) {
        // 创建数据集
        double[] xData = new double[]{1, 2, 3, 4, 5};
        double[] yData = new double[]{2, 4, 6, 8, 10};

        // 创建折线图
        XYChart chart = new XYChartBuilder().width(600).height(400).title("Line Chart").xAxisTitle("X").yAxisTitle("Y").build();

        // 设置图表样式
        chart.getStyler().setLegendPosition(Styler.LegendPosition.InsideNE);
        chart.getStyler().setDefaultSeriesRenderStyle(XYSeries.XYSeriesRenderStyle.Line);

        // 添加数据到图表
        chart.addSeries("Line", xData, yData);

        // 创建Swing窗口
        JFrame frame = new JFrame("XChart Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        // 创建ChartPanel并将图表放入其中
        XChartPanel<XYChart> chartPanel = new XChartPanel<>(chart);
        frame.add(chartPanel, BorderLayout.CENTER);

        // 设置窗口大小并显示
        frame.pack();
        frame.setVisible(true);
    }
}

运行结果

运行上述代码将显示一个窗口,窗口中展示了一个折线图,图表中展示了X和Y的关系。

使用JavaFX生成图表

JavaFX是Java的下一代GUI工具包,提供了丰富的组件来构建现代用户界面。JavaFX内置了多种图表类型,包括折线图、柱状图、饼图等。

示例代码

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

public class JavaFXChartExample extends Application {
    @Override
    public void start(Stage stage) {
        // 创建X轴和Y轴
        CategoryAxis xAxis = new CategoryAxis();
        NumberAxis yAxis = new NumberAxis();
        xAxis.setLabel("Name");
        yAxis.setLabel("Age");

        // 创建柱状图
        BarChart<String, Number> barChart = new BarChart<>(xAxis, yAxis);
        barChart.setTitle("Age Chart");

        // 创建数据系列
        XYChart.Series<String, Number> series = new XYChart.Series<>();
        series.setName("Age");
        series.getData().add(new XYChart.Data<>("John", 28));
        series.getData().add(new XYChart.Data<>("Jane", 24));
        series.getData().add(new XYChart.Data<>("Bob", 32));

        // 将数据系列添加到图表中
        barChart.getData().add(series);

        // 创建场景并设置到舞台
        Scene scene = new Scene(barChart, 800, 600);
        stage.setScene(scene);
        stage.setTitle("JavaFX Chart Example");
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

运行结果

运行上述代码将显示一个窗口,窗口中展示了一个柱状图,图表中展示了John、Jane和Bob的年龄。

综合应用

生成带有图表的Excel报告

在实际应用中,通常需要将表格和图表结合生成报告。使用Apache POI和JFreeChart可以生成带有图表的Excel报告。

示例代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.usermodel.*;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtils;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelChartReportExample {
    public static void main(String[] args) throws IOException {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();

        // 创建工作表
        XSSFSheet sheet = workbook.createSheet("Sheet1");

        // 创建表头
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("ID");
        headerRow.createCell(1).setCellValue("First Name");
        headerRow.createCell(2).setCellValue("Last Name");
        headerRow.createCell(3).setCellValue("Age");

        // 创建数据行
        Object[][] data = {
            {"1", "John", "Doe", 28},
            {"2", "Jane", "Doe", 24},
            {"3", "Bob", "Smith", 32}
        };

        for (int i = 0; i < data.length; i++) {
            Row row = sheet.createRow(i + 1);
            for (int j = 0; j < data[i].length; j++) {
                row.createCell(j).setCellValue(data[i][j].toString());
            }
        }

        // 调整列宽
        for (int i = 0; i < 4; i++) {
            sheet.autoSizeColumn(i);
        }

        // 创建JFreeChart图表
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(28, "Age", "John");
        dataset.addValue(24, "Age", "Jane");
        dataset.addValue(32, "Age", "Bob");

        JFreeChart chart = ChartFactory.createBarChart(
                "Age Chart", // 图表标题
                "Name", // 类别轴标签
                "Age", // 值轴标签
                dataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向
                true, // 是否显示图例
                true, // 是否生成工具提示
                false // 是否生成URL链接
        );

        // 将图表保存为PNG图片
        byte[] chartImage = ChartUtils.encodeAsPNG(chart.createBufferedImage(600, 400));

        // 将图表图片插入到Excel中
        int pictureIdx = workbook.addPicture(chartImage, Workbook.PICTURE_TYPE_PNG);
        XSSFDrawing drawing = sheet.createDrawingPatriarch();
        XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 5, 10, 15);
        drawing.createPicture(anchor, pictureIdx);

        // 保存工作簿到文件
        try (FileOutputStream fileOut = new FileOutputStream("report.xlsx")) {
            workbook.write(fileOut);
        }

        // 关闭工作簿
        workbook.close();
    }
}

运行结果

运行上述代码将生成一个名为report.xlsx的Excel文件,文件中包含一个名为Sheet1的工作表,表格中展示了ID、First Name、Last Name和Age四列数据,表格下方是一个柱状图,展示了每个人的年龄。

生成带有图表的PDF报告

使用iText和JFreeChart可以生成带有图表的PDF报告。

示例代码

”`java import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Image; import com.itextpdf.layout.element.Paragraph; import com.itextpdf.layout.element.Table; import com.itextpdf.layout.property.UnitValue; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtils; import org.jfree.chart.JFreeChart; import org.jfree.data.category.DefaultCategoryDataset;

import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException;

public class PdfChartReportExample { public static void main(String[] args) throws IOException { // 创建PDF文档

推荐阅读:
  1. javascript中如何使用json生成html表格
  2. Python中如何使用Pandas生成可视化图表

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:PHP通过bypass disable functions执行系统命令的方法有哪些

下一篇:JAVA中怎么去除对象中的空格

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》