gpt4 book ai didi

java - 如何在不丢失默认呈现的情况下修改 TableCellRenderer?

转载 作者:行者123 更新时间:2023-11-30 08:03:18 26 4
gpt4 key购买 nike

我有一个包含四列的 JTable。我正在尝试将其中一列的标题居中对齐。我得到了一个半工作的解决方案,但问题是标题的默认呈现/样式似乎丢失了。见截图。我想获取当前的 TableCellRenderer,将标题对齐方式更改为 CENTER,并将经过调整的 TableCellRenderer 应用于特定列。我该怎么做?

表格截图

enter image description here

我的 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;
}
}

最佳答案

不是扩展 DefaultTableCellRenderer,而是委托(delegate)给 JTableHeader 的默认渲染器:

public class CenterRenderer implements TableCellRenderer {
private final JTableHeader header;

public CenterRenderer(JTableHeader header) {
this.header = header;
}

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) header.getDefaultRenderer().getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
label.setHorizontalAlignment(SwingConstants.CENTER);
return label;
}
}

关于java - 如何在不丢失默认呈现的情况下修改 TableCellRenderer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36374044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com