【问题标题】:How to access local variables in anonymous inner actionListener class and actionPerformed method?如何访问匿名内部 actionListener 类和 actionPerformed 方法中的局部变量?
【发布时间】:2014-03-24 05:33:56
【问题描述】:

我正在为 CS 课程做一个项目,所以我不能发布任何代码,但我会尽力描述我的设置。该程序应该有 3 个独立的 JPanel,每个 JPanel 都有一个图像和用于旋转和重置图像的按钮。提供了一个 Driver 类来设置 JFrame,创建单个 Project 对象以传递给其他类(该 Project 类包含旋转和组合图像的方法),并具有 main 方法。

我所做的是创建一个扩展 JPanel 的类,以设置一个带有图像、文件名和旋转/重置按钮的 JPanel。我有这个类的构造函数,其中包含面板的编号(以跟上在面板中写入图像编号)、要显示的图像文件以及在 Driver 类中创建的 Project 对象(以便能够访问处理图像的方法)。我立即调用 super();然后将文件名和图像(作为 JLabel)和按钮设置为(JButtons)。

这就是我的问题所在。我正在尝试设置 Rotate 按钮,因此我创建了一个匿名内部类操作侦听器和 actionPerformed 方法。我计划做的是使用 Project 对象引用来调用图像对象的旋转方法,让它返回一个 BufferedImage 到一个 modifiedImage BufferedImage 中。然后用原图去掉JLabel,将modifiedImage添加为JLabel,重新验证,重绘。但是,我不能在内部 actionPerformed 类中使用 this 引用或对 Project 对象的引用。

如何在 actionperformed 内部类中访问这些引用?还是我的设置完全糟糕?请多多包涵——这是我第一次使用任何类型的 GUI。

【问题讨论】:

  • “如何在 actionperformed 内部类中访问这些引用?” 将您尝试引用的对象设为 final 或将其设为全局类成员。
  • “我正在为 CS 课程做一个项目,所以我不能发布任何代码” - 这就是 MCTREs 的用途。

标签: java swing jbutton jlabel


【解决方案1】:

引用Project 对象final。它将解决问题并且不会造成任何伤害,因为您不会再次分配它。

【讨论】:

  • 是的,我看到有人建议这样做,但我不认为(尽管我可能错了)我的程序可以做到这一点。 Driver 类是部分预制的,其中 Project 对象已声明 Project project = new Project();在设置 ImagePanel 构造函数时,我让它传入一个 Project 对象。因此,在 Driver 类中调用 ImagePanel 构造函数时,我将项目对象传递到那里。所以它可以在 ImagePanel 类中访问,但不能在 actionPerformed 内部类中访问。我无法将对象的创建更改为 final,但我应该在其他地方将其设为 final 吗?
  • 让 Project 中的方法保持静态对我来说最有意义,因为它们所做的只是修改图像,但无论出于何种原因,教授都不是这样设置的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 2016-05-28
  • 1970-01-01
相关资源
最近更新 更多