gpt4 book ai didi

java - 建立JFrame的语法。哪个是对的?

转载 作者:行者123 更新时间:2023-12-04 20:50:57 27 4
gpt4 key购买 nike

我是编程新手,对 Java 绝对是新手。在今年秋天开始计算机科学类(class)之前,我正在自学,我对从两位不同作者那里看到的语法很好奇。在一本书中,通常通过将类作为JFrame的扩展来建立一个JFrame

public class MyClass extends JFrame {

等等

但是,另一位作者以及本网站上的问题通常会在类内部建立一个框架:

public class MyClass {
JFrame frame = new JFrame();

首先,一个比另一个有什么优势?在我看来,虽然我不是专家,但将类作为 JFrame 的扩展可以更轻松地设置框架的参数以及向其中添加组件。

IE中的扩展格式,你随便说

add(component);

但是,在其他格式中,必须键入:

frame.getContentPane().add(component);

这看起来更乏味。

有人可以简明扼要地解释一下这背后的原因,或者这只是一个偏好问题。我对此进行了调查,但无法得到直接的答案。

最佳答案

许多人(包括我)更喜欢后者有哲学和实践上的原因:

  • 总体上更喜欢组合而不是继承。
  • 仅当您打算更改类的固有行为(即覆盖其一个或多个方法)时才扩展该类。
  • 通过不扩展 JFrame,可以更轻松地创建最大化内聚和最小化耦合的类,并编写干净的基于 MVC 的代码。此概念的一个更重要的示例是避免让您的 GUI 代码(您的 View 代码)实现任何监听器接口(interface)(您的控制 代码)。这对于婴儿程序来说没问题,但对于有可能变得复杂的成人代码来说就不行了。
  • 通过不扩展大型复杂类(例如 JFrame),您可以降低难以调试的隐藏覆盖恶意行为的风险。尝试扩展 JFrame 或 JPanel 并为类提供 getX()getY() 方法,看看我的意思!
  • 如果您使用的 IDE 可以为您的类的对象提供可用方法的建议,并且您不重写 JFrame 等庞大的复杂类,则可以大大减少可能建议方法的数量(和复杂性)。
  • 通过调整您的 Swing GUI 来创建 JPanel 而不是覆盖 JFrame,您可以大大提高该 GUI 使用方式的灵 active 。现在它可以作为更复杂的 GUI 的一部分或作为 CardLayout View 交换的一部分放置在 JDialog、JOptionPane、JApplet 中、另一个 JPanel 的内部....我可以继续下去。
  • 出于与上述相同的原因,我的许多 GUI 就是这样做的,创建 JPanel,我可以通过将它们放入小型测试程序中的 JFrames 中进行隔离测试,然后再将它们添加到更大的应用程序整体中。

关于java - 建立JFrame的语法。哪个是对的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com