【发布时间】:2014-11-30 13:49:39
【问题描述】:
我正在尝试让表格上的标题进行自动换行。我已经设法做到了,但第一个数据行正在扩展。表格的代码是:
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 means header
*/
if(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。如果我把代码拿出来,我会得到一张普通的桌子,但标题上没有换行。这是公认的问题还是我遗漏了什么?
任何帮助表示赞赏
【问题讨论】:
-
01/05/2014 - 31/05/2014 == 2014 年 5 月
-
标题高度的静态尺寸怎么样?
setSize(new Dimension(colWidth, 26));在每种情况下,标题网格单元格的底线似乎都需要一点额外的空间:table.setRowHeight(row, height + 2); -
谢谢Joop,我想过这个,但还是不明白为什么第一行数据扩展了这么多。
标签: java swing jtable tablecellrenderer jtableheader