如何解决如何使用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\",12) }
^
所以我尝试了
scala> class Foo extends Component { override var font = java.awt.new Font(\"Helvetica\",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\",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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。