2

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

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

4

1 回答 1

2

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