2010-05-26 88 views
7

我设置为使用Java创建文件资源管理器。其目的是尽可能模仿默认浏览器的行为,无论可能是底层操作系统。使用Java的文件资源管理器 - 如何处理它?

我已经完成了Java中的GUI编程。

我已经查到的秋千,SWT和JFace,和我开始我的这个教程项目: http://www.ibm.com/developerworks/opensource/library/os-ecgui1/

我想知道你对解决这个问题的最好办法的意见。如果您可以评论编码的复杂性,可移植性和操作系统的独立性以及效率,那就太好了。

还有什么我应该知道的吗?还有其他的方式吗?

非常感谢!


感谢您的回答。

看起来我会选择Swing来实现文件浏览器。 什么让我毛骨悚然是没有什么可以模仿默认的资源管理器视图...你能提供一些关于它的指针吗?我是否获取文件列表,获取图标,然后在屏幕上以网格方式排列它们以显示默认的资源管理器视图?

+0

这里的“默认浏览器”是指平台/窗口管理器的默认值吗?因为那意味着你需要检测这些东西,并为不同的平台使用不同的实现。如果有人已经做了这样的事情,我会开始用谷歌搜索。 – fish 2010-05-27 06:48:19

+0

是的,我的意思是,默认的浏览器。我用Google搜索了一下;很容易找到目录树结构代码,但浏览器窗口的图标以网格方式布置,至今没有运气。 : - | – Chaitanya 2010-05-27 15:23:02

+0

交叉发布到http://groups.google.com/group/comp.lang.java。gui/browse_frm/thread/88c34511a58a4cbe – trashgod 2010-05-28 02:49:42

回答

6

您最好使用Swing。对于不同的操作系统,您需要不同版本的SWT和JFace。

最好的方法是从简单的开始,并添加到你有更多的学习。

为了让您开始,您需要一个带有两个JPanel子项的JFrame。

您需要将JMenuBar添加到JFrame中。 JMenu项目被添加到JMenuBar中。 JMenuItem项目被添加到JMenu中。

Oracle的Swing Overview将帮助您向项目中添加更多Swing组件。

+3

+1,用于跨平台可移植性和逐步优化。 – trashgod 2010-05-26 16:29:21

+0

如果我错了,请原谅我,但我只能在Swing中看到JFileChooser,并且它可以显示打开/保存对话框;但我想要类似于文件浏览器的东西。 到目前为止,我还没有看到使用JFileChooser的方法。 – Chaitanya 2010-05-26 17:14:07

+1

@ user299988:您将不得不从许多Swing组件构建文件浏览器。我在回答中给了你一个组件清单。 – 2010-05-26 18:02:14

4

我会从How to Use File Choosers开始,但org.netbeans.swing.outline.Outline的例子,讨论here,是吸引人的。

附录:@Gilbert Le Blanc对Swing的易用性提出了一个很好的观点。相比之下,SWT需要稍微更多的努力来部署,但一些用户更喜欢org.eclipse.swt.widgets.FileDialog的更高保真度,如here所示。

附录:我注意到,FileDialog显示了一个更原生的窗口,如看到here。您可以在您的目标平台上尝试它。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

/** @see https://stackoverflow.com/questions/2914733 */ 
public class FileDialogTest { 

    public static void main(String[] args) { 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new GridLayout(0, 1)); 
     frame.add(new JButton(new AbstractAction("Load") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       FileDialog fd = new FileDialog(frame, "Test", FileDialog.LOAD); 
       fd.setVisible(true); 
       System.out.println(fd.getFile()); 
      } 
     })); 
     frame.add(new JButton(new AbstractAction("Save") { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       FileDialog fd = new FileDialog(frame, "Test", FileDialog.SAVE); 
       fd.setVisible(true); 
       System.out.println(fd.getFile()); 
      } 
     })); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

对不正确的链接。 – trashgod 2010-05-26 17:41:26

+0

我已经添加了一个使用'java.awt.FileDialog'的示例,它可能更适合您的需求。 – trashgod 2010-05-27 21:02:22