2015-09-29 119 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)