如何基于多个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
相关产品推荐
相关产品推荐

