【发布时间】:2015-02-02 18:33:30
【问题描述】:
我通过扩展 DefaultTableCellHeaderRenderer 创建了一个自定义表头
public class TableHeaderRenderer extends DefaultTableCellHeaderRenderer
{
private JPanel panel;
private JLabel label;
public TableHeaderRenderer()
{
panel = new JPanel();
label = new JLabel(" ");
label.setHorizontalAlignment(JLabel.CENTER);
panel.add(label);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
label.setText(String.valueOf(value));
label.setBorder(BorderFactory.createMatteBorder(0, (column == 0 ? 1 : 0), 1, 1, Color.Red));
return panel;
}
}
我想做的是为许多其他表格中显示的已排序列显示向上或向下的小箭头。
我试图找出哪一列是按什么顺序排序的,但没有得到任何结果。
谁能建议我如何去做?
【问题讨论】:
-
试试
JTable.setAutoCreateRowSorter(true)。如果这对您不起作用,请尝试发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。 -
1.同意 SSCCE/MCVE,短,可运行,可编译,在局部变量中具有 JTable/XxxTableModel 的硬编码值,2. RowSorter 可以返回(对于具体列)ACS...、DECS...、UNSORTED
-
@AndrewThompson 我确实将它设置为 true,但是没有显示箭头。我的意思是怎么可能?我必须在渲染器类中自己做。我正在做
table.getTableHeader().setDefaultRenderer(new TableHeaderRenderer());,这将导致我的渲染器没有显示箭头。我会尝试发布 MCVE 或 SSCCE,但是我不知道我能把它限制在一个小样本中,因为代码会相当大,有多个类,因为我必须创建 JFrame、JTable、分配标题等等…… -
显示在许多其他表格中显示的已排序列的向上或向下箭头。 == 图标,更多的价值在 UIManager
-
"..代码会比较大" 删除不相关的代码。这不是火箭科学。 “.. 有多个类,因为我必须创建 JFrame、JTable、分配标题等。” 我在那里只看到一个类,如果您计算自定义标题,则为 2 个。