如何使用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
中的那个!
没有找到相关结果
已邀请:
1 个回复
外镶受继
的getter和setter,因此设置字体的规范方法是:
如果要覆盖字体定义以使用var,则必须使用与
兼容的东西,后者包装Java字体(通常使用隐式转换完成)。像这样:
我不确定这是否能满足您的要求。 (编辑:在REPL会话中进行了测试,其中加载了太多垃圾;您实际上并不需要这样做!简单的var var = new java.awt.Font覆盖即可。)正常的getter / setter设计为可以通过信息传递到“ 11”对等方。如果您采用这种方式,则可能会中断该转发。因此,使用第一种方法。 如果要在
中执行此操作,请进行编辑:
是
中的私有字段。您不能覆盖Java中的字段,也不能对Java中的私有字段执行任何操作。因此,尝试使用新的var覆盖它肯定不会起作用。 (不过,编译器肯定会给出更多有用的错误消息!)Scala只能覆盖字段,因为它们不是真正的字段-它们是引用隐藏的基础字段的getter / setter对。 您应该改用(或覆盖)
和
。