我試圖讓表頭有自動換行。我設法做到了這一點,但第一個數據行正在擴大。表的代碼是: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 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月 – mKorbel 2014-10-06 10:12:20
如何爲靜態大小標題高度? 'setSize(new Dimension(colWidth,26));'在任何情況下,標題網格單元的底線都需要額外的空間:'table.setRowHeight(row,height + 2);' – 2014-10-06 10:21:02
Thanks Joop,I想到這一點,但仍然不明白爲什麼第一行數據被擴大了很多。 – Mikerb 2014-10-06 10:37:58