重写scala swing中文本区域的绘制方法



我正在学习scala。swing当前,我很好奇,如果我可以重写现有组件的油漆方法,如textarea,结果是我可以,但我认为我做错了:

var rectangles = List[Rectangles]()
val textarea = new TextArea(){
    override def paint(g:Graphics2D){
        super.paint(g)
        rectangles.foreach{g.draw}
    }
}

这个片段显示了我有一个矩形列表和一个文本区域。这是不合理的。我只是好奇我是否能设法在文本区域上画矩形。

当调试/添加打印时,它清楚地告诉我它运行了我覆盖的绘制方法,但它不显示我的矩形

我只是使用Graphics2D对象错误,或者为什么我看不到我的矩形?

感谢您的帮助

我不能像这样使用foreach,这就是它的工作方式

rectangles.foreach{r => g.draw(r)}

这回答了实际的问题,但它让我感到困惑,因为我习惯使用这样的foreach

foo.foreach{println}

我想那是另一个问题

您的代码工作正常

import scala.swing._
object Test extends SimpleSwingApplication {
  var rectangles = List[Rectangle]()
  val textarea = new TextArea(){
    override def paint(g:Graphics2D){
      super.paint(g)
      rectangles.foreach{g.draw}
    }
  }
  lazy val top = new Frame {
    rectangles ::= new Rectangle(8, 8, 20, 20) // example
    contents = textarea
    size = new Dimension(100, 100)
  }
}
Test.main(null)

最新更新