我正在学习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)