You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多个ArrayList创建JTable并实现对应数据绑定展示

问题1:JTable无法正常运行的修复方案

问题原因

你现有代码仅完成了JTable数据模型的构建与数据填充,没有将JTable挂载到Swing顶层容器(如JFrame)中,也没有配置窗口的基础显示参数,因此无法看到渲染后的表格界面。同时Swing组件的初始化与显示必须在事件调度线程(EDT)中执行,否则可能出现线程安全异常。

完整可运行代码

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.util.ArrayList;

public class ArrayListToJTable {
    public static void main(String[] args) {
        // 填充示例数据
        ArrayList<String> mediaCompany = new ArrayList<>();
        mediaCompany.add("Facebook");
        mediaCompany.add("Google");
        mediaCompany.add("Twitter");

        ArrayList<Double> rank = new ArrayList<>();
        rank.add(4.0);
        rank.add(7.0);
        rank.add(2.0);

        // Swing组件操作必须放在事件调度线程中
        SwingUtilities.invokeLater(() -> displayTable(mediaCompany, rank));
    }

    static void displayTable(ArrayList<String> mediaCompany, ArrayList<Double> rank) {
        String [] columnNames = {"Media Platform", "Ranking"};
        DefaultTableModel model = new DefaultTableModel(columnNames, 0);
        JTable table = new JTable(model);

        // 填充数据
        for (int i = 0; i < mediaCompany.size(); i++) {
            Object[] row = {mediaCompany.get(i), rank.get(i)};
            model.addRow(row);
        }

        // 窗口配置
        JFrame frame = new JFrame("Media Ranking Table");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // JTable需要放到滚动容器中才能显示表头和滚动条
        frame.add(new JScrollPane(table));
        frame.setSize(400, 300);
        // 窗口居中显示
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

问题2:控制台输出规整表格的实现

实现思路

通过String.format()方法设置固定列宽对齐,手动拼接表格边框即可实现规整的控制台表格输出,示例代码如下:

import java.util.ArrayList;

public class ConsoleTablePrinter {
    public static void main(String[] args) {
        ArrayList<String> mediaCompany = new ArrayList<>();
        mediaCompany.add("Facebook");
        mediaCompany.add("Google");
        mediaCompany.add("Twitter");

        ArrayList<Double> rank = new ArrayList<>();
        rank.add(4.0);
        rank.add(7.0);
        rank.add(2.0);

        printConsoleTable(mediaCompany, rank);
    }

    static void printConsoleTable(ArrayList<String> mediaCompany, ArrayList<Double> rank) {
        // 定义列宽
        int col1Width = 20;
        int col2Width = 10;
        // 打印表头分隔线
        String line = "+" + "-".repeat(col1Width) + "+" + "-".repeat(col2Width) + "+";
        System.out.println(line);
        // 打印表头
        System.out.printf("| %-"+(col1Width-2)+"s | %-"+(col2Width-2)+"s |%n", "Media Platform", "Ranking");
        System.out.println(line);
        // 打印数据行
        for (int i = 0; i < mediaCompany.size(); i++) {
            System.out.printf("| %-"+(col1Width-2)+"s | %-"+(col2Width-2)+"s |%n", mediaCompany.get(i), rank.get(i));
        }
        System.out.println(line);
    }
}

输出效果

+--------------------+----------+
| Media Platform     | Ranking  |
+--------------------+----------+
| Facebook           | 4.0      |
| Google             | 7.0      |
| Twitter            | 2.0      |
+--------------------+----------+

内容的提问来源于stack exchange,提问作者Hector Damian Reyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:00:04