当前位置: 首页 > 面试题库 >

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

戚侯林
2023-03-14
问题内容

与该Wiki相反,我正在从编码的角度寻找实现Swing GUI控件的正确方法。

我一直在寻求学习Java及其GUI工具的方法,但是我发现Internet教程之后的Internet教程将所有内容都扔了进去main,我知道这是不对的。

我也尝试过Netbeans等RAD系统和其他“可视”编辑器,但是到编码时,我已经有了一大堆代码,但我不知道它做什么的一半,所以我打算学习手动进行代码摆动,我知道基本的控件和布局,但想以正确的方式进行操作。

我缺少模型或标准吗?

示例问题…

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

如何将主菜单封装在该框架对象中?还是我自己创建?等等…

如何将“视图”逻辑与“应用程序”逻辑分开?

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


问题答案:

由于关于“最佳做法”的构成似乎存在一些争议,因此,我将为您提供最适合我的发现,以及我的推理:

1.每个窗口都应扩展JFrame或JDialog(取决于窗口的类型)。这使得无需每次指定特定对象即可轻松控制窗口的属性。不过,这更多的是一般情况,因为我知道这两种方法都是这样做的。

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

3.侦听器应位于匿名内部类中。您的顶级类不应实现任何侦听器。这样可以防止类似黑客的行为,除了它们所连接的对象之外,都可以从任何地方调用侦听器方法

这是一个具有单个框架的简单应用程序,用于演示这些做法:

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();
    }
}


 类似资料:
  • 老项目遗留了一些代码,VUE页面里面的代码太长了 想把TS代码拆分出来,请问最佳实践是什么样子的? 旧代码:

  • 我正在开发一个Flutter应用程序,但想知道在从UI调用异步代码时应该做什么--比方说UI小部件的构建方法。 例如,我的应用程序通过一个服务类连接Firebase,该服务类使用Async-Await样式从Firebase获取记录。使用await可以确保我的服务类的方法在返回UI端之前完成记录检索。 吉米

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En

  • VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给

  • 本章文档将阐述一些使用herosphp开发一些常用模块的一些比较好的实践。 未完待续。。。