自定义 JFileChooser 以在文件列表下方设置预览器



>我需要一个带有预览面板的文件对话框来显示图像。我可以使用JFileChooser来设置我需要的一切,我唯一找不到做的是设置附件组件的位置。我希望预览器位于文件列表和文件名文本字段之间。我只能在文件列表的右侧找到正在添加的附件组件。

是否可以在文件列表和文件名文本字段之间设置它?所有JFileChooser功能的替代方案是什么?

扩展我的评论:一种快速而肮脏的方法是将附件组件添加到包含文件列表的组件中。它是一个带有边框布局的文件类型的自定义面板,位于其自己的中心列表/表格,因此您可以将附件添加到其南部。在最简单的情况下(对于 Metal/Nimbus),选择器的中心本身是 - FilePane 和下面的代码片段可以直接使用。对于其他 LAF(f.i. Windows),您需要更深入地研究中心组件,直到找到列表/表的父级。

JFileChooser chooser = new JFileChooser();
JComponent panel = new JPanel();
panel.add(new JButton("my dummy Accessory"));
panel.setBackground(Color.RED);
chooser.setAccessory(panel);
JComponent center = null;
BorderLayout layout = (BorderLayout) chooser.getLayout();
for (Component child : chooser.getComponents()) {
    if (BorderLayout.CENTER == layout.getConstraints(child)) {
        center = (JComponent) child;
    }
}
if (center != null)
    center.add(panel, BorderLayout.SOUTH);

小心:

  • 它依赖于实现细节,因此很脆弱
  • 它高度依赖 LAF
  • 它不会在运行时承受 LAF 切换

最新更新