如何在Java Swing中打开文件而不使用JFileChooser

4
我正在使用Java Swing(GUI),希望添加一个按钮到我的项目中,用于打开文件。
我不喜欢JFileChooser,因为它会打开一个小窗口浏览目录中的文件。在Java Swing下,我能否使用其他替代品来代替JFileChooser?
我尝试使用SWT元素,但没有成功。我尝试使用按钮对象并将其放入JFrame中,但失败了,所以我猜测SWT和Swing不能混合使用?
这是一个Java Swing with JFileChooser的示例,我正在寻找类似这样的东西来放置在我的JFrame中。

Windows file dialog

2个回答

6
使用本地PLAF的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);
            }
        });
    }
}

还不太符合您的要求吗?那么您可以从这个页面开始,然后根据需要进行更改:


...所以我猜SWT和Swing不能混用吗?

通常情况下,不建议将Swing/AWT/SWT组件混合在同一个顶层容器中。在Swing的基于JFrame的界面上打开AWT FileDialog不是问题,因为它们都是顶层容器。我相信在Swing/SWT或AWT/SWT中也应该适用相同的方法。


我怎样才能在没有 main 的情况下使用这段代码?我尝试过将其删除,但是代码无法编译。谢谢! - JAN
“如何在没有主函数的情况下使用这段代码?”除非您使用的是会自动插入默认(不可见)main方法的棘手IDE,否则需要至少有一个main或开发一个小程序才能在屏幕上获得Swing GUI。我不建议使用小程序,因此请理解如何从main中使代码正常工作。 - Andrew Thompson
我需要选择一个文件并解析它,简而言之,选择文件的过程只是程序的开始,因此main函数使其变得困难。我应该在另一个问题中发布整个代码吗?再次感谢。 - JAN
FYI:这在Windows上可以工作,但在OS X上不行。在OS X下,FileDialog显示标准的“打开文件”窗口(包括侧边栏),而JFileChooser没有侧边栏。我担心在Linux下你最终会使用GTK JFileChooser,它实在是无法使用,并且与一个体面的文件选择器没有任何共同之处。 - Robin
我的意思是,在 OS X 上本地的 Look-and-feel(=Aqua)JFileChooser 与标准的 OS X 应用程序中获得的“打开文件”对话框不同。另一方面,FileDialog 看起来相同。 - Robin
显示剩余2条评论

3

@ron 是的,你可以这样做。否则我不会建议的。 - Robin
基本上,SWT 和 Swing 混合在一起了吗? - JAN
@ron 不是,但AWT和Swing是可能的。 - Robin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接