【问题标题】:Find out which row is sorted and if it is ascending or descending [closed]找出对哪一行进行排序以及它是升序还是降序[关闭]
【发布时间】: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 个。

标签: java swing sorting jtable


【解决方案1】:

我通过执行以下操作来显示箭头。

我换了

label_.setText(String.valueOf(value));

if (table.getRowSorter() != null && table.getRowSorter().getSortKeys() != null && !table.getRowSorter().getSortKeys().isEmpty() &&
        table.getRowSorter().getSortKeys().get(0).getColumn() == column)
{
    if (table.getRowSorter().getSortKeys().get(0).getSortOrder() == SortOrder.ASCENDING)
    {
        label_.setText(String.valueOf(value) + "  \u25b2");
    }
    else if (table.getRowSorter().getSortKeys().get(0).getSortOrder() == SortOrder.DESCENDING)
    {
        label_.setText(String.valueOf(value) + "  \u25bc");
    }
}
else
{
    label_.setText(String.valueOf(value));
}

箭头会按原样显示。

【讨论】:

  • 1.有一个更简单,直接的方法,你仍然必须(我会等待其他人帮助我。) 2. 缺少此代码,没有提及 UNSORTED :-),3. 再次为什么是硬编码,输入为UIManager 的键,然后在(例如)Nimbus L&F 中也是可见的、可接受的
猜你喜欢
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多