gpt4 book ai didi

swing - JTable、自定义标题渲染器和排序图标

转载 作者:行者123 更新时间:2023-12-04 03:40:14 27 4
gpt4 key购买 nike

在 JTable 标题上设置自定义渲染器时,我得到了预期的视觉行为(边框、字体、对齐方式……),但我无法获得通常在对行进行排序时出现的 LaF 排序图标。

这是设置自定义标题渲染器的代码:

Enumeration<TableColumn> columns = getColumnModel().getColumns();
while (columns.hasMoreElements())
columns.nextElement().setHeaderRenderer(new XDeliveryTableHeaderRenderer());

这是自定义 header 渲染器的摘录:
public class MyTableHeaderRenderer extends JLabel implements TableCellRenderer {
private static final Font labelFont = new Font("Arial", Font.BOLD, 11);

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setFont(labelFont);
setHorizontalAlignment(SwingConstants.CENTER);
setText(value.toString());
setBorder(BorderFactory.createEtchedBorder());
return this;
}
}

有什么提示吗?

最佳答案

尝试委托(delegate) L&F 安装的渲染器:

public class MyTableHeaderRenderer implements TableCellRenderer {
private static final Font labelFont = new Font("Arial", Font.BOLD, 11);

private TableCellRenderer delegate;

public MyTableHeaderRenderer(TableCellRenderer delegate) {
this.delegate = delegate;
}

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

Component c = delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

if(c instanceof JLabel) {
JLabel label = (JLabel) c;
label.setFont(labelFont);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setBorder(BorderFactory.createEtchedBorder());
}
return c;
}
}

// Usage:
JTableHeader header = table.getTableHeader();
header.setDefaultRenderer(new MyTableHeaderRenderer(header.getDefaultRenderer()));

正如 kleopatra 警告的那样,这可能不是最稳定的解决方案,请参阅 this bug report我刚刚投入生产。该问题的报告者建议使用自定义 Table/TableColumn 子类来更新 TableColumn#getDefaultRenderer 中的委托(delegate)渲染器。

关于swing - JTable、自定义标题渲染器和排序图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792586/

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