【问题标题】:How to open files in Java Swing without JFileChooser如何在没有 JFileChooser 的 Java Swing 中打开文件
【发布时间】:2012-06-05 15:59:33
【问题描述】:

我正在使用 Java Swing (GUI),我想在我的项目中添加一个按钮来打开文件。

我不喜欢JFileChooser,因为它会打开一个小窗口来浏览目录中的文件。我可以用其他东西代替JFileChooser 在Java Swing下吗?

我尝试过使用SWT的元素但是没有用,意思是使用按钮对象然后在JFrame里面使用它,但是失败了,所以我猜SWT和Swing不行混合在一起?

这是Java Swing with JFileChooser 的示例,我正在寻找like this 的内容以放入我的JFrame

【问题讨论】:

    标签: java swing file-io swt jfilechooser


    【解决方案1】:

    JFileChooser 与本地 PLAF 似乎满足所述要求。

    import javax.swing.JFileChooser;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    
    public class NativeFileChooser {
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(
                                UIManager.getSystemLookAndFeelClassName());
                    } catch(Exception e) {
                        e.printStackTrace();
                    }
                    JFileChooser jfc = new JFileChooser();
                    jfc.showOpenDialog(null);
                }
            });
        }
    }
    

    还是不太合你的意?然后你可以从this one 开始并根据需要更改它:


    ..所以我猜 SWT 和 Swing 不会混合在一起?

    同一个顶级容器中混合 Swing/AWT/SWT 组件通常不是一个好主意。在基于 Swing 的 JFrame 上打开 AWT FileDialog 不是问题,因为它们都是顶级容器。我很确定这同样适用于 Swing/SWT 或 AWT/SWT。

    【讨论】:

    • 如何在没有 main 的情况下使用此代码?我试图删除它,但没有它代码将无法编译。谢谢!!
    • “我如何在没有 main 的情况下使用此代码?” 除非您有一个棘手的 IDE,它为您插入默认(不可见)main 方法,否则这是必要的要么至少拥有一个main,要么开发一个小程序,以在屏幕上获得一个 Swing GUI。我不推荐这个小程序,所以坚持理解如何从main 获取代码。
    • 我需要选择一个文件然后解析它,简而言之,选择文件的过程只是程序的开始,因此main使它变得困难。我应该在另一个问题中发布整个代码吗?再次感谢。
    • "..在另一个问题中发布整个代码.." 1) 是的,另一个问题,但是 2) 为了尽快获得更好的帮助,请发布SSCCE(而不是而不是“整个代码”)。
    • 仅供参考:这适用于 Windows,但不适用于 OS X。在 OS X 下,FileDialog 显示标准的“打开文件”窗口(包括侧边栏),而 JFileChooser 没有侧边栏。而且我担心在 Linux 下你最终会得到 GTK JFileChooser,坦率地说,它是不可用的,与一个像样的文件选择器没有任何共同之处
    【解决方案2】:

    如果您不需要JFileChooser 的灵活性,您可以选择使用本机操作系统文件对话框的FileDialog。另见Code ranch topicthis answer on SO

    【讨论】:

    • @ron 是的,你可以。否则我不会建议它
    • 基本上,SWT 和 Swing 混合在一起?
    • @ron 不,但 AWT 和 Swing 是可能的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多