7

最近提出的一个问题:如何在详细信息视图中启动 JFileChooser?答案提供 了一个很好的技术来做到这一点。

我想在这里提出一个层次的愿望:鉴于我现在知道如何在详细信息视图中打开 JFileChooser,我可以使用按日期排序的文件打开它吗?我知道用户当然可以点击标题,但是有没有办法在代码中实现这一点?

4

1 回答 1

7

我不知道有任何 API 可以做到这一点。以下代码查找文件选择器使用的表,然后手动对日期列进行排序:

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);

这会将排序顺序的切换添加到事件调度线程 (EDT) 的末尾,因此它应该在 JTable 详细信息视图的默认行为之后执行。

于 2013-05-07T23:25:00.870 回答