gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:35:06 25 4
gpt4 key购买 nike

我试过了

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 的那个!

最佳答案

组件包含 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 session 中进行了测试;您实际上不需要这样做!简单的覆盖 var font = new java.awt.Font 就可以了。)普通的 getter/setter 旨在通过传递给 javax.swing 节点的信息。如果你这样做,你可能会破坏转发。所以使用第一种方法。


如果您尝试在 java.awt.Component 中执行此操作,请编辑:Font font;java.awt.Component< 中的私有(private)字段。您不能覆盖 Java 中的字段,也不能对 Java 中的私有(private)字段做任何。因此,尝试用新的 var 覆盖它肯定是行不通的。 (然而,编译器当然可以提供信息更丰富的错误消息!)Scala 只能覆盖字段,因为它们不是真正的字段——它们是引用隐藏的底层字段的 getter/setter 对。

您应该改用(或覆盖)getFontsetFont

关于java - 如何使用 Scala 覆盖 java.awt.Component 中的字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com