在scala swing中重写textarea的绘制方法
我目前正在学习scala.swing,我很好奇是否可以覆盖现有组件(如textarea)的绘制方法,结果是可以,但我再次认为我做错了什么:在scala swing中重写textarea的绘制方法,swing,scala,overriding,paint,Swing,Scala,Overriding,Paint,我目前正在学习scala.swing,我很好奇是否可以覆盖现有组件(如textarea)的绘制方法,结果是可以,但我再次认为我做错了什么: var rectangles = List[Rectangles]() val textarea = new TextArea(){ override def paint(g:Graphics2D){ super.paint(g) rectangles.foreach{g.draw} } } 这个片段显示我
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)
你完全可以用前面提到的方式使用foreach。请添加更多信息。(矩形列表是空的吗?例如)矩形不是空的->它是否工作似乎只取决于我使用foreach的方式