有人知道如何在对行进行排序时实现JTable列标题的向上和向下箭头吗?
我已经采用了自己的排序方式,并通过鼠标按键点击鼠标来触发,剩下的唯一内容就是标题上此类箭头的可见性 ...
还有一种方法可以轻松实现可排序的jtable吗?
我完成了所有的排序,最后我不能做的就是显示排序箭头..
我不想制作一个新的,但我没有找到是否有setEnableArrow或其他东西..
有关于此的任何想法?
答案 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的图标。然后您应该可以看到类似的内容:
空图标可以是:
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; }
}