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

标签 java scala fonts components overriding

我试过了

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!

最佳答案

组件包含字体的getter和setter,因此设置字体的规范方法是:

class Foo extends Component {
  font = new java.awt.Font(/* blah blah */)
}

如果你想覆盖字体定义以使用变量,你必须使用与 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)字段执行任何操作。因此,尝试用新的变量覆盖它肯定是行不通的。 (但是,编译器当然可以给出信息更丰富的错误消息!)Scala 只能重写字段,因为它们不是真正的字段——它们是引用隐藏底层字段的 getter/setter 对。

您应该使用(或覆盖)getFontsetFont 来代替。

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

相关文章:

java - 使用 Actor Supervised ,如果发生失败,如何以定义的时间间隔重试相同的消息定义的次数

scala - Scala 中带和不带 () 的函数参数

java - scala-android.jar 里有什么?

scala - 错误 : `<<=` operator is removed. 使用 `key := { x.value }` 或 `key ~= (old => { newValue })`

java - 使用 iText 在 Java 程序中嵌入字体

css - @font-face CSS 属性无效

java - 如何仅从日志文件中删除 Tomcat 信息

java - 适配器 getFilter 不过滤

java - Tomcat:无法销毁与 ProtocolHandler 关联的端点

java - 使用 PDFBox 处理许多 unicode 字符