【问题标题】:Extending JFrame Creates New JFrame Object扩展 JFrame 创建新的 JFrame 对象
【发布时间】:2018-07-31 21:45:04
【问题描述】:

我一直在创建一个相当复杂的小程序,使用 JFrames 在 NetBeans 上扩展其他 JFrames,但我在从以前的 JFrame 屏幕访问数据时遇到问题。看下图:

  1. 我的小程序打开时显示一个主屏幕 (MainScreen),其中带有一个用于访问新页面以编辑 .xls 页面 (EditScore) 的按钮。该页面扩展了一种骨架JFrame(MenuSkeleton),它是EditScore和其他页面(称为Edit1Edit2)的通用形式,可以通过MainScreen访问。我使用MenuSkeleton,因为这两个页面彼此之间仅略有不同。

  2. MenuSkeletonEditScore 中打开一个文件选择器,允许用户选择要编辑的.xls 页面并将此页面的名称保存在整数xlsName 中(保存在MenuSkeleton 中)。所以xlsNameMenuSkeleton 中被初始化为一个空字符串,但在EditScore 中被赋予了一个新值。

  3. EditScore 有一个用于打开 .xls 编辑器的按钮 (EditingWindow)。 EditingWindow 扩展 WindowSkeleton 扩展 MenuSkeleton 因为:

    -我需要在WindowSkeleton中访问xlsName

    -WindowSkeleton 不能扩展EditScore,因为有时它通过Edit1Edit2 调用,甚至不打开EditScore

我的问题是访问 xlsName. 我可以在 MenuSkeleton 和 EditScore 中正常访问 xlsName,但是一旦我尝试在 WindowSkeletonEditingWindow 中访问它,它就为空.我猜这意味着当我在WindowSkeleton 中扩展它时,正在创建一个MenuSkeleton 的新实例。有没有办法让我访问xlsNameeditFolder 中给出的值?

感谢您阅读这个荒谬的问题!很抱歉,它太长且令人困惑 - 我会根据收到的任何建议添加/修改。

【问题讨论】:

  • “applet”是指“嵌入到网页中的组件”- 需要明确的是,Applet API 已被有效弃用且不再受支持。 “使用 JFrames 扩展其他 JFrames” - 这是一个糟糕设计的好例子。您应该避免从顶级容器进行扩展,原因有很多,但主要是它们不灵活且难以重用或以后扩展
  • 谢谢!你对我可以做什么有什么建议吗?
  • "我猜这意味着当我在 WindowSkeleton 中扩展 MenuSkeleton 时正在创建一个新实例" - 这并不“完全”准确,但我很理解你为什么这么认为this - 当您“扩展”WindowSkeleton 时,不会创建 MenuSkeleton 的新“实例”。但是,当您创建 WindowSkeleton 的实例时,从 MenuSkeleton 继承的属性被初始化为其默认值 - 措辞刚刚结束
  • “有没有办法让我访问editFolder 中给出的xlsName 值?” - 这是一种基本且非常常见的做法。你应该先看看Passing Information to a Method or a Constructor
  • 它们是,当您创建 EditScoreEditingWindow 的实例时,类定义的所有属性以及继承的属性都将初始化为其默认值,但 EditScore 为您提供可以在工作流程中打开文件

标签: java netbeans jframe extends japplet


【解决方案1】:

据我了解,EditingWindowEditScore 都扩展了 MenuSkeleton。但是EditingWindow 也扩展了WindowSkeleton。尝试绕过WindowSkeleton 并直接从MenuSkeleton 扩展EditingWindow。从两个类扩展,其中一个已经是子类会导致问题。希望这会有所帮助。

【讨论】:

  • 在最坏的情况下,只需将 Excel 文件名保存在全局变量中即可。
猜你喜欢
  • 1970-01-01
  • 2013-07-12
  • 2013-06-27
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多