【发布时间】:2016-07-22 07:20:32
【问题描述】:
我有一个有四列的 JTable。我正在尝试将其中一列的标题居中对齐。我得到了一个半有效的解决方案,但问题是标题的默认渲染/样式似乎丢失了。见截图。我想获取当前的 TableCellRenderer,将标题对齐更改为 CENTER,并将调整后的 TableCellRenderer 应用于特定列。我该怎么做?
表格截图
我的 JTable 类
public class MyTable extends JTable {
public MyTable() {
String[] headers = { "Parent", "Summary", "Key", "Processed" };
MyTableModel model = new MyTableModel(headers);
Object[] testrow = { "TST-99999", "S", "K", false };
model.addRow(testrow);
setModel(model);
Enumeration<TableColumn> columns = getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn column = (TableColumn) columns.nextElement();
System.out.println(column.getHeaderValue());
column.setResizable(false);
switch ((String) column.getHeaderValue()) {
//case "Parent":
//case "Key":
case "Processed":
column.setMaxWidth(80);
column.setMinWidth(80);
column.setHeaderRenderer(new CenterRenderer());
break;
}
}
}
}
我的 TableModel 类
public class MyTableModel extends DefaultTableModel {
public MyTableModel(String[] headers) {
for(String header:headers){
addColumn(header);
}
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
@Override
public Class<?> getColumnClass(int index) {
switch (index) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return Boolean.class;
default:
return String.class;
}
}
}
我的 TableCellRenderer 类
public class CenterRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
label.setHorizontalAlignment(SwingConstants.CENTER);
return label;
}
}
【问题讨论】:
-
请发布您如何实现您所做的事情的代码,以便这里的人们可以帮助您。
-
默认标题文本显示在中心。
-
相关post仅供参考。