【发布时间】:2014-02-12 12:10:57
【问题描述】:
我试图从这个线程的答案中了解以下类的工作原理: Scala Popup Menu
由于线程很老,我决定开始一个新问题。我是具有 Java 背景的 Scala 新手,我想知道这个类是如何工作的。我读到与类同名的对象就像具有单例对象的类?我不确定这如何适合实现包装器..(为什么我们需要对象?)
SuperMixin 特性到底有什么作用? API 说“这个特性用于将某些调用从对等方重定向到包装器并返回。对于公开可以通过覆盖自定义的方法很有用。”这对初学者来说不太好解释。
如果有人可以帮助向初学者解释这个类和对象(在我看来,神奇地)如何为我提供 JPopupMenu 的包装类并让我调用使 popupMenu 出现的 show 方法,我将不胜感激屏幕..而且我似乎也可以设置它的内容(contents+= some scala.swing.menuItem),而无需在下面的类中定义它?
import javax.swing.JPopupMenu
import scala.swing.{ Component, MenuItem }
import scala.swing.SequentialContainer.Wrapper
object PopupMenu {
private[PopupMenu] trait JPopupMenuMixin { def popupMenuWrapper: PopupMenu }
}
class PopupMenu extends Component with Wrapper {
override lazy val peer: JPopupMenu = new JPopupMenu with PopupMenu.JPopupMenuMixin with SuperMixin {
def popupMenuWrapper = PopupMenu.this
}
def show(invoker: Component, x: Int, y: Int): Unit = peer.show(invoker.peer, x, y)
/* Create any other peer methods here */
}
【问题讨论】: