Java / Swing GUI最佳实践(从代码角度)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

我正在寻找从编码的角度来实现Swing GUI控件的正确方法。

我一直在寻求学习Java和它的GUI工具,但是我发现互联网教程后,互联网教程引发了一切main,我知道这是不对的。

我也尝试过像Netbeans和其他“可视化”编辑器这样的RAD系统,但是当我编写代码时,我有一堆代码,我不知道它的功能的一半,所以我打算学习手动代码摆动,我知道基本的控制和布局,但想要正确地做到这一点。

有没有我错过的模型或标准?

示例问题...

扩展JFrame并创建我自己的框架对象?(我会承认是的)

我是否将主菜单封装在该框架对象内?或者我创建它自己的?等等...

如何从“应用程序”逻辑中分离“查看”逻辑?

基本上,我正在寻找行业标准,以及如何组织GUI代码。

提问于
用户回答回答于

由于似乎有什么构成“最佳实践”的争论,我会给你我最适合我的作品和我的推理:

1.每个窗口应该扩展JFrame或JDialog(取决于窗口的类型)。这样可以很容易地控制窗口的属性,而无需每次指定特定的对象。不过,这是一般情况,因为我已经知道这样做。

2.该main()方法应该在一个单独的类中。这增加了能够在别处使用窗口类的可能性,因为它们不与特定的实现绑定。从技术上讲,它没有什么区别,但应用程序启动代码不属于窗口。

听众应该是匿名的内部类。你的顶级类不应该实现任何监听器。这可以防止黑客从除了它们所连接的对象之外的任何地方调用侦听器方法。

这是一个简单的应用程序,用一个框架来演示这些实践:

public class Main {
    public static void main(String[] args) {
        final String text = args[0];
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                final MyWindow wnd = new MyWindow(text);
                wnd.setVisible(true);
            }
        });
    }
}

public class MyWindow extends JFrame {
    public MyWindow(String text) {
        super("My Window");

        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                MyWindow.this.setVisible(false);
                MyWindow.this.dispose();
            }
        });

        final JButton btn = new JButton(text);
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(MyWindow.this, "Button Pressed", "Hey", JOptionPane.INFORMATION_MESSAGE);
            }
        });

        setLayout(new FlowLayout());
        add(btn);
        pack();
    }
}
用户回答回答于

每个窗口应该扩展JFrame或JDialog ...

main()方法应该在单独的类中...

听众应该是匿名的内部类...

我还想补充以下内容:

4.)明智地使用GridBagLayout(GBL)。GBL是一个非常强大的布局管理器,很难学,但功能非常强大。

5.)考虑手动编码所有的用户界面。我个人不喜欢由可视编辑制作的代码。但是,据说这几年我没有用过视觉编辑器。在这一点上他们可能会更好。

6.)明智地使用JPanels。查看你的UI,并确定哪些组件应该与屏幕大小更改相同,然后将这些组件组合在一起使用JPanel。考虑使用JPanels中的JPanel来获得正确的调整行为。

我通常采取稍微不同的方法让我的组件处理事件,然后Jonathan做,但我相信他的方法比我的更清洁一点。

另外,真正研究MVC和分层体系结构的使用。真正最好不要将UI和业务逻辑混合在一起。

所属标签

可能回答问题的人

  • 找虫虫

    0 粉丝0 提问6 回答
  • 不吃貓的鱼oo

    5 粉丝466 提问5 回答
  • 优惠活动秘书

    0 粉丝2 提问5 回答
  • 爸爸

    腾讯 · 客户端安全 (已认证)

    4 粉丝4 提问5 回答

扫码关注云+社区

领取腾讯云代金券