8

我准备使用 Java 创建一个文件资源管理器。目的是尽可能地模拟默认资源管理器的行为,无论底层操作系统是什么。

我没有用 Java 做过 GUI 编程。

我查阅了 Swing、SWT 和 JFace,并开始使用本教程开始我的项目:http: //www.ibm.com/developerworks/opensource/library/os-ecgui1/

我想知道您对解决此问题的最佳方法的看法。如果您可以评论编码的复杂性、可移植性和操作系统独立性以及效率,那就太好了。

还有什么我应该知道的吗?是否存在其他一些方法?

非常感谢!


感谢您的回答和回复。

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

4

2 回答 2

6

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

最好的方法是从简单的开始,随着你的了解不断增加你所拥有的东西。

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

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

Oracle 的Swing 概述将帮助您将更多的 Swing 组件添加到您的项目中。

于 2010-05-26T16:10:54.217 回答
4

我将从如何使用文件选择器开始,但这里org.netbeans.swing.outline.Outline讨论的示例很吸引人。

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

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

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);
    }
}
于 2010-05-26T16:09:56.743 回答