如何使用Scala覆盖java.awt.Component中的字体?

| 我试过了
scala> class Foo extends Component { var font = new java.awt.Font(\"Helvetica\", java.awt.Font.BOLD, 12) }
我得到:
<console>:10: error: overriding variable font in class Component of type java.awt.Font;
 variable font needs `override\' modifier
       class Foo extends Component { var font = new java.awt.Font(\"Helvetica\", java.awt.Font.BOLD, 12) }
                                         ^ 
所以我尝试了
scala> class Foo extends Component { override var font = java.awt.new Font(\"Helvetica\", java.awt.Font.BOLD, 12) }
但这根本没有帮助:
<console>:10: error: overriding variable font in class Component of type java.awt.Font;
 variable font has incompatible type
       class Foo extends Component { override var font = new java.awt.Font(\"Helvetica\", java.awt.Font.BOLD, 12) }
                                                  ^
该错误背后的原因是什么,应如何正确进行处理? 编辑:对不起,没看到scala也有
Component
。所讨论的
Component
java.awt.Component
中的那个!     
已邀请:
        Component包含用于
font
的getter和setter,因此设置字体的规范方法是:
class Foo extends Component {
  font = new java.awt.Font(/* blah blah */)
}
如果要覆盖字体定义以使用var,则必须使用与
scala.swing.Font
兼容的东西,后者包装Java字体(通常使用隐式转换完成)​​。像这样:
class Foo extends Component {
  override var font: scala.swing.Font =
    new java.awt.Font(\"Helvetica\", java.awt.Font.BOLD, 12)
}
 我不确定这是否能满足您的要求。 (编辑:在REPL会话中进行了测试,其中加载了太多垃圾;您实际上并不需要这样做!简单的var var = new java.awt.Font覆盖即可。)正常的getter / setter设计为可以通过信息传递到“ 11”对等方。如果您采用这种方式,则可能会中断该转发。因此,使用第一种方法。 如果要在
java.awt.Component
中执行此操作,请进行编辑:
Font font;
java.awt.Component
中的私有字段。您不能覆盖Java中的字段,也不能对Java中的私有字段执行任何操作。因此,尝试使用新的var覆盖它肯定不会起作用。 (不过,编译器肯定会给出更多有用的错误消息!)Scala只能覆盖字段,因为它们不是真正的字段-它们是引用隐藏的基础字段的getter / setter对。 您应该改用(或覆盖)
getFont
setFont
。     

要回复问题请先登录注册