如何在JTable单元格中显示多行

Moh*_*sal 5 java swing jtable

我想创建一个JTable如下图:在此输入图像描述

java将使用哪个类,可能如何使用?

Cha*_*uni 13

多线JTable电池可以轻松使用定制TableCellRenderer.使用以下步骤创建TableCellRenderer.

第1步:创建 TableCellRenderer

以下代码显示TableCellRendererString[]值创建多行.可以将其更改String[]为a Vector或其他Collection类型

public class MultiLineTableCellRenderer extends JList<String> implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        //make multi line where the cell value is String[]
        if (value instanceof String[]) {
            setListData((String[]) value);
        }

        //cell backgroud color when selected
        if (isSelected) {
            setBackground(UIManager.getColor("Table.selectionBackground"));
        } else {
            setBackground(UIManager.getColor("Table.background"));
        }

        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

第2步:TableCellRenderer进入JTable

    MultiLineTableCellRenderer renderer = new MultiLineTableCellRenderer();

    //set TableCellRenderer into a specified JTable column class
    table.setDefaultRenderer(String[].class, renderer);

    //or, set TableCellRenderer into a specified JTable column
    table.getColumnModel().getColumn(columnIndex).setCellRenderer(renderer);
Run Code Online (Sandbox Code Playgroud)

这是我测试的截图:

多行TableCellRenderer测试

  • 不过,这需要一些调整来自动调整行高。介意我将其添加到您的答案中吗? (3认同)

mKo*_*bel 5

基本上你可以把任何类型JComponentsJTable单元格,依赖于内容是否可编辑,那就是跟我说话

  • JTable一个TableColumn没有TableHeader

  • JPanel(GridBagLayout)JLabels或或JTextFields

  • JList