Java 将字符串加载到JTable列

Java 将字符串加载到JTable列,java,swing,jtable,Java,Swing,Jtable,我在用存储在字符串中的值填充JTable时遇到问题 字符串的形式为: String factor = {"UMIN2\nT_UMIN2\nUMIN1\nT_UMIN1\nUMAX1\nT_UMAX1\nUMAX2\nT_UMAX2"}; Jtable的代码如下所示: int len = factor.split("[\n\r]").length; final String[] columnNames = {"Factor", "Tol, min", "Exp, min", "E

我在用存储在字符串中的值填充JTable时遇到问题

字符串的形式为:

String factor = {"UMIN2\nT_UMIN2\nUMIN1\nT_UMIN1\nUMAX1\nT_UMAX1\nUMAX2\nT_UMAX2"};
Jtable的代码如下所示:

    int len = factor.split("[\n\r]").length;
    final String[] columnNames = {"Factor", "Tol, min", "Exp, min", "Exp, max", "Tol, max", "Test 1", "Test 2", "Test 3", "Test 4", "Test 5", "Test 6", "Test 7", "Test 8", "Test 9", "Test 10"};
    final Object[][] data = {{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},        };
    model = new DefaultTableModel(data, columnNames);
    model.setRowCount(len);
    table = new JTable(data, columnNames);
    table.setModel(model);

    for(int x = 0; x < len; x++) table.setValueAt(factor,x,0);

    JTableHeader header = table.getTableHeader();
    header.setFont(new Font("Times New Roman", Font.BOLD, 13));
    header.setBackground(Color.black);
    header.setForeground(Color.white);

    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setSize(988, 618);
    scrollPane.setFont(new Font("Times New Roman", Font.BOLD, 13));
    scrollPane.setLocation(10, 60);
    getContentPane().add(scrollPane);
[   **factor**   ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ **factor** ]
[ UMIN2  ]
[ T_UMIN2]
[ UMIN1  ]
[ T_UMIN1]
[ UMAX1  ]
[ T_UMAX1]
[ UMAX2  ]
[ T_UMAX2]
然而,我想要的是,每个新行条目都有自己的方框,因此我看起来像:

    int len = factor.split("[\n\r]").length;
    final String[] columnNames = {"Factor", "Tol, min", "Exp, min", "Exp, max", "Tol, max", "Test 1", "Test 2", "Test 3", "Test 4", "Test 5", "Test 6", "Test 7", "Test 8", "Test 9", "Test 10"};
    final Object[][] data = {{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},        };
    model = new DefaultTableModel(data, columnNames);
    model.setRowCount(len);
    table = new JTable(data, columnNames);
    table.setModel(model);

    for(int x = 0; x < len; x++) table.setValueAt(factor,x,0);

    JTableHeader header = table.getTableHeader();
    header.setFont(new Font("Times New Roman", Font.BOLD, 13));
    header.setBackground(Color.black);
    header.setForeground(Color.white);

    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setSize(988, 618);
    scrollPane.setFont(new Font("Times New Roman", Font.BOLD, 13));
    scrollPane.setLocation(10, 60);
    getContentPane().add(scrollPane);
[   **factor**   ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ UMIN2T_... ]
[ **factor** ]
[ UMIN2  ]
[ T_UMIN2]
[ UMIN1  ]
[ T_UMIN1]
[ UMAX1  ]
[ T_UMAX1]
[ UMAX2  ]
[ T_UMAX2]
现在我正在使用setValueAt函数

我还尝试改变框的高度,并将所有数据放在一个dox中,这很好,但是,我需要单独的框,因为我以后必须根据表中的其他数据对它们进行着色


谢谢您的帮助。

您必须拆分因子并将每个令牌设置为每行

    int row = 0;
    for (StringTokenizer stringTokenizer = new StringTokenizer(factor, "\n"); stringTokenizer.hasMoreTokens();) {
        String token = stringTokenizer.nextToken();
        table.setValueAt(token, row++, 0);
    }

这将是
TableCellRenderer
的一个问题,默认情况下,它基于
JLabel
和列宽。我还担心
setSize
setLocation
的使用。您应该使用适当的布局管理器,因为它能够更好地处理操作系统之间的差异。我正在使用setSize和setLocation,因为我的窗口中还需要空间来存放其他信息,例如标题和按钮以返回和打印。我可以看到一个
BorderLayout
,其中
JToolBar
JPanel
充当导航面板。绝对布局从长远来看对你没有帮助,一旦字体改变或DPI改变,你的脸就会爆炸