2015-09-29 120 views
0

我正在学习scala.swing,我很好奇,如果我可以重写像textarea这样的现有组件的paint方法,事实证明我可以,但后来我认为, m做错了事:覆盖scala swing中textarea的paint方法

var rectangles = List[Rectangles]() 

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

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

当调试/添加打印它清楚地表明我,它贯穿我重写paint方法,但它不会显示我的矩形

我是简单地使用Graphics2D对象错误或那为什么我不能看到我的矩形?

感谢提前任何帮助

回答

0

确定事实证明,我不能使用foreach这样的,这是它如何工作

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

这个回答的实际问题,但它让我很困惑,因为我以前用的foreach这样

foo.foreach{println} 

但那是另外一个问题我想

+1

您绝对可以按照提及的方式使用foreach。 PLZ添加更多信息。 (例如矩形列表是空的?) –

+0

矩形不是空的 - >它是否工作似乎只取决于我使用foreach的方式 – Julian

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)