【发布时间】:2018-07-31 21:45:04
【问题描述】:
我一直在创建一个相当复杂的小程序,使用 JFrames 在 NetBeans 上扩展其他 JFrames,但我在从以前的 JFrame 屏幕访问数据时遇到问题。看下图:
我的小程序打开时显示一个主屏幕 (
MainScreen),其中带有一个用于访问新页面以编辑 .xls 页面 (EditScore) 的按钮。该页面扩展了一种骨架JFrame(MenuSkeleton),它是EditScore和其他页面(称为Edit1和Edit2)的通用形式,可以通过MainScreen访问。我使用MenuSkeleton,因为这两个页面彼此之间仅略有不同。MenuSkeleton在EditScore中打开一个文件选择器,允许用户选择要编辑的.xls 页面并将此页面的名称保存在整数xlsName中(保存在MenuSkeleton中)。所以xlsName在MenuSkeleton中被初始化为一个空字符串,但在EditScore中被赋予了一个新值。-
EditScore有一个用于打开 .xls 编辑器的按钮 (EditingWindow)。EditingWindow扩展WindowSkeleton扩展MenuSkeleton因为:-我需要在
WindowSkeleton中访问xlsName-
WindowSkeleton不能扩展EditScore,因为有时它通过Edit1和Edit2调用,甚至不打开EditScore。
我的问题是访问 xlsName. 我可以在 MenuSkeleton 和 EditScore 中正常访问 xlsName,但是一旦我尝试在 WindowSkeleton 或 EditingWindow 中访问它,它就为空.我猜这意味着当我在WindowSkeleton 中扩展它时,正在创建一个MenuSkeleton 的新实例。有没有办法让我访问xlsName 在editFolder 中给出的值?
感谢您阅读这个荒谬的问题!很抱歉,它太长且令人困惑 - 我会根据收到的任何建议添加/修改。
【问题讨论】:
-
“applet”是指“嵌入到网页中的组件”- 需要明确的是,Applet API 已被有效弃用且不再受支持。 “使用 JFrames 扩展其他 JFrames” - 这是一个糟糕设计的好例子。您应该避免从顶级容器进行扩展,原因有很多,但主要是它们不灵活且难以重用或以后扩展
-
谢谢!你对我可以做什么有什么建议吗?
-
"我猜这意味着当我在 WindowSkeleton 中扩展 MenuSkeleton 时正在创建一个新实例" - 这并不“完全”准确,但我很理解你为什么这么认为this - 当您“扩展”
WindowSkeleton时,不会创建MenuSkeleton的新“实例”。但是,当您创建WindowSkeleton的实例时,从MenuSkeleton继承的属性被初始化为其默认值 - 措辞刚刚结束 -
“有没有办法让我访问editFolder 中给出的xlsName 值?” - 这是一种基本且非常常见的做法。你应该先看看Passing Information to a Method or a Constructor
-
它们是,当您创建
EditScore或EditingWindow的实例时,类定义的所有属性以及继承的属性都将初始化为其默认值,但EditScore为您提供可以在工作流程中打开文件
标签: java netbeans jframe extends japplet