>我需要一个带有预览面板的文件对话框来显示图像。我可以使用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 切换