Java JTable标题自动换行

我试图让表格上的标题有自动换行。 我已设法做到这一点,但第一个数据行正在扩展。 该表的代码是:

public class GenerateTable extends JTable { private JCheckBox boxSelect = new JCheckBox(); private JTableHeader hdGen; public class LineWrapCellRenderer extends JTextArea implements TableCellRenderer { private static final long serialVersionUID = 1L; int rowHeight = 0; // current max row height for this scan @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { /* * row = 0) { setWrapStyleWord(false); return this; } setText((String) value); setWrapStyleWord(true); setLineWrap(true); // current table column width in pixels int colWidth = table.getColumnModel().getColumn(column).getWidth(); // set the text area width (height doesn't matter here) setSize(new Dimension(colWidth, 1)); // get the text area preferred height and add the row margin int height = getPreferredSize().height + table.getRowMargin(); // ensure the row height fits the cell with most lines, row = -1 for header if (column == 2 || height > rowHeight) { table.setRowHeight(row, height); rowHeight = height; } return this; } } LineWrapCellRenderer lwHeader = new LineWrapCellRenderer(); public GenerateTable(GenerateTableModel model) { super(model); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); /* * Select */ TableColumn colSelect = this.getColumnModel().getColumn(0); colSelect.setCellEditor(new DefaultCellEditor(boxSelect)); colSelect.setPreferredWidth(60); /* * category */ this.getColumnModel().getColumn(1).setResizable(false); this.getColumnModel().getColumn(1).setPreferredWidth(200); /* * Amount values */ for (int i=2;i<model.getColumnCount();i++) { colSelect = this.getColumnModel().getColumn(i); colSelect.setPreferredWidth(100); colSelect.setResizable(false); colSelect.setHeaderRenderer(lwHeader); } } } 

输出是:

在此处输入图像描述

我在调试中遵循了代码,并没有为数据行调用LineWrapCellRenderer。 如果我取出代码,我得到一个普通的表,但没有包装在标题上。 这是一个公认的问题还是我错过了什么?

任何帮助赞赏

您可以更轻松地实现多行标题。

与许多Swing组件一样,您可以使用HTML代码。 在HTML中,指定
元素以指示换行/换行的位置。

例如,如果使用以下标头值(列名称):

 String[] columnNames = { "First
column", "Second
column", "Third
column" };

然后标题将正确呈现为2行。 您甚至不需要创建/使用自定义标题渲染器,默认标题渲染器可以正确处理HTML代码。

注意:标题高度将由第一列的高度决定。 因此,您必须为第一列使用2行HTML值。 如果第一列只有一个单词,您可以另外添加一个空的第二行,如下所示: "Select
 "