【问题标题】:Customize JFileChooser to set Previewer below file list自定义 JFileChooser 以在文件列表下方设置 Previewer
【发布时间】:2013-10-29 14:42:25
【问题描述】:

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

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

【问题讨论】:

  • 不支持 - 如果您不顾一切,您可以在创建选择器后尝试删除/添加选择器的预览(查看 ui-delegates 的源以查看使用了哪个 Layoutmanager)

标签: java swing layout customization jfilechooser


【解决方案1】:

扩展我的评论:一种快速而肮脏的方法是将附件组件添加到包含文件列表的组件中。它是一个带有 BorderLayout 的 FilePane 类型的自定义面板,位于列表/表格的中心,因此您可以将附件添加到其南部。在最简单的情况下(对于Metal/Nimbus),选择器的中心本身就是-FilePane,下面的sn-p可以直接使用。对于其他 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 切换中存活

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多