最近提出的一个问题:如何在详细信息视图中启动 JFileChooser?答案提供 了一个很好的技术来做到这一点。
我想在这里提出一个层次的愿望:鉴于我现在知道如何在详细信息视图中打开 JFileChooser,我还可以使用按日期排序的文件打开它吗?我知道用户当然可以点击标题,但是有没有办法在代码中实现这一点?
最近提出的一个问题:如何在详细信息视图中启动 JFileChooser?答案提供 了一个很好的技术来做到这一点。
我想在这里提出一个层次的愿望:鉴于我现在知道如何在详细信息视图中打开 JFileChooser,我还可以使用按日期排序的文件打开它吗?我知道用户当然可以点击标题,但是有没有办法在代码中实现这一点?
我不知道有任何 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 详细信息视图的默认行为之后执行。