在scala swing中覆盖textarea的paint方法

时间:2015-09-29 11:02:58

标签: swing scala override paint

我正在学习scala.swing当前我很好奇我是否可以覆盖像textarea这样的现有组件的绘制方法,结果是我可以但是我又认为我做错了什么:

var rectangles = List[Rectangles]()

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

此代码段显示我有一个矩形列表和一个textarea。这不应该是有道理的。如果我能设法在textarea上绘制矩形,我只是很好奇。

当调试/添加打印时,它清楚地告诉我它通过我的重写绘制方法运行但它不会显示我的矩形

我只是简单地使用了Graphics2D对象,或者为什么我看不到我的矩形?

感谢您提前提供任何帮助

2 个答案:

答案 0 :(得分:0)

好吧事实证明我不能像这样使用foreach,这就是它的工作原理

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

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

foo.foreach{println}

但那是我猜的另一个问题

答案 1 :(得分:0)

您的代码按预期工作。

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)