【问题标题】:Using a method declared in an interface, but not class使用在接口中声明的方法,而不是类
【发布时间】:2016-06-21 08:59:41
【问题描述】:

所以我有一个包含非特定 JPanel 的对象: private static JPanel setPanel;

我有很多 JPanel 子类用于我在 JFrame 上换出的不同类型的屏幕,它们的行为不同。现在,这些子类中的每一个都实现了某个方法getKeyPress(),并且我已经制作了一个包含此方法的接口,这些 JPanel 子类中的每一个也都实现了该方法。我的问题是我是否可以通过我的通用 setPanel 对象引用该方法,例如:setPanel.getKeyPress() 以某种方便的方式,或者我是否必须使用其中的一个方法创建 JPanel 的子类,然后让每个子类成为那个的子类?

【问题讨论】:

  • private static JPanel setPanel; 为什么声明为static?我从未见过对 GUI 组件有效使用 static
  • setPanel 通常也是方法的名称...
  • @Andrew Thompson- 它与我的主要方法(这是初始化和维护我的 JFrame 的类)一起保存在类中,重点是我可以调用不同的方法来切换JFrame 持有的面板。
  • 重点是它不是最好的解决方案,而且可能会导致问题。
  • @T.J.Crowder- 好点。这可能会让其他人感到困惑,虽然这是一个个人项目,但练习编程其他人可以理解的东西总是好的。我会改的。

标签: java swing class user-interface interface


【解决方案1】:

...或者我是否必须创建一个 JPanel 的子类,其中包含该方法,然后让每个子类成为该方法的子类?

这就是要走的路,你自己的MyJPanel(或类似的)类(无论是抽象的还是非抽象的)。然后,在整个代码中使用 MyJPanel。这使您可以在编译时检查您正在处理您的一个子类,并为您提供一个方便的地方,以便在需要时添加更多方法。

可以

((TheInterface)setPanel).getKeyPress();

...但它很笨拙,并且您会丢失编译时代码检查(以及所有反对强制转换的常见论点)。

【讨论】:

  • 另一种不太优雅的方法可以在所有这些 JPanel 子类中覆盖一个 JPanel 的方法。
猜你喜欢
  • 2012-09-22
  • 2011-03-23
  • 2014-02-02
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多