排序箭头jtable列标题

时间:2011-10-12 19:06:08

标签: java swing sorting jtable

有人知道如何在对行进行排序时实现JTable列标题的向上和向下箭头吗?

我已经采用了自己的排序方式,并通过鼠标按键点击鼠标来触发,剩下的唯一内容就是标题上此类箭头的可见性 ...

还有一种方法可以轻松实现可排序的jtable吗?


我完成了所有的排序,最后我不能做的就是显示排序箭头..

我不想制作一个新的,但我没有找到是否有setEnableArrow或其他东西..

有关于此的任何想法?

4 个答案:

答案 0 :(得分:3)

您可以查看DefaultTableCellHeaderRenderer的源代码。在getTableCellRendererComponent中,您可以看到检索这些图标的位置(例如UIManager.getIcon("Table.ascendingSortIcon"))以及此图标的设置方式(setIcon(sortIcon);

答案 1 :(得分:1)

这是实现排序的最简单方法:

    MyModel model = new MyModel();
    TableRowSorter<MyModel> sorter = new TableRowSorter<MyModel> (model);
    jTable1 = new javax.swing.JTable();
    jTable1.setRowSorter(sorter);
    jTable1.setModel(model);

答案 2 :(得分:0)

如果您使用JXtable而不是Jtable,该怎么办?

这些表格在标题中有箭头来对它们进行排序,它们很容易使用... 值得一试...

答案 3 :(得分:0)

我建议您不要误解DefaultTableCellHeaderRenderer。这个问题是,它就是默认值。每个LaF都应该创建该子类的一个子类,并在那里进行自己的渲染。我的建议是使用可以立即提供此功能的LaF。我认为TinyLaf可以做到这一点,但我不确定。您可以 子类DefaultTableCellHeaderRenderer,但是冒着将标头渲染与LaF其余部分分离的风险。

那怎么办呢? Unicode可以解救!请参考geometric shapes页并使用所需的内容。我选择了'\u25B2''\u25BC'三角形。但是然后我不得不隐藏可怕的Swing图标:

UIManager.put( "Table.ascendingSortIcon", new EmptyIcon() );
UIManager.put( "Table.descendingSortIcon", new EmptyIcon() );

请注意以上几行!!它们将替换应用程序中所有可能不需要的所有 JTable的图标。然后您应该可以看到类似的内容:

Sorting icon unicode

空图标可以是:

class EmptyIcon implements Icon, Serializable {
    int width = 0;
    int height = 0;
    public void paintIcon(Component c, Graphics g, int x, int y) {}
    public int getIconWidth() { return width; }
    public int getIconHeight() { return height; }
}