最近有一个问题问到:如何在详细视图中启动JFileChooser?,并且答案提供了一个很好的技巧来解决这个问题。
我想在此提高期望值:既然我现在知道如何在详细视图中打开JFileChooser,那么我也可以让它按日期排序文件吗? 我知道用户当然可以点击标题,但在代码中是否有一种方法可以实现这一点?
我想在此提高期望值:既然我现在知道如何在详细视图中打开JFileChooser,那么我也可以让它按日期排序文件吗? 我知道用户当然可以点击标题,但在代码中是否有一种方法可以实现这一点?
JFrame frame = new JFrame();
JFileChooser fileChooser = new JFileChooser(".");
Action details = fileChooser.getActionMap().get("viewTypeDetails");
details.actionPerformed(null);
// Find the JTable on the file chooser panel and manually do the sort
JTable table = SwingUtils.getDescendantsOfType(JTable.class, fileChooser).get(0);
table.getRowSorter().toggleSortOrder(3);
fileChooser.showOpenDialog(frame);
您还需要Darryl的Swing Utils类。
编辑:
显然,在下面的评论中建议更改了一些逻辑:
尝试:
JTable table = SwingUtils.getDescendantsOfType(JTable.class, fileChooser).get(0);
table.getModel().addTableModelListener( new TableModelListener()
{
@Override
public void tableChanged(TableModelEvent e)
{
table.getModel().removeTableModelListener(this);
SwingUtilities.invokeLater( () -> table.getRowSorter().toggleSortOrder(3) );
}
});
fileChooser.showOpenDialog(frame);
DetailsTableRowSorter
的更改,自Java 11起,此功能不再工作: https://github.com/openjdk/jdk/commit/458f8d25976b2d59b0c0b6cb89bbdadbbf9265eamodelStructureChanged()
调用了setSortKeys(null)
,这将有效地删除任何排序,并且在列出文件列表时调用此回调,至少在 Linux 上是如此。 - MinguntoggleSortOrder(2)
; (2)它始终从升序开始。 - Mingun