2014-02-17 65 views
0

我正在看Scala中的步骤6.9中的例子,并且他的设置背景的方法不足,因为当框架被调整大小时,背景不会改变。示例代码(更新更改到2.10版本的工作是:如何在Scala swing中设置背景

import scala.swing._ 
import scala.swing.event._ 

object circle extends SimpleSwingApplication { 
    def top = new MainFrame { 
    var mouseX = 0 
    var mouseY = 0 
    var mouseclicked = false 
    title = "Draw Circle" 
    val rect = new java.awt.Rectangle(350,250) 
    preferredSize = new Dimension(350,250) 
    val canvas = new Panel { 
     border = Swing.EmptyBorder(15, 15, 15, 15) 
     opaque = false 
     override def paintComponent(g: java.awt.Graphics2D) { 
    // g.setBackground(java.awt.Color.magenta) 
     g.setColor(java.awt.Color.magenta) 
     g.fill(rect) 
     g.setColor(java.awt.Color.blue) 
      if (mouseclicked) { 
      g.fillOval(mouseX-10, mouseY-10, 20, 20) 
      mouseclicked = false 
      } 
     } 
     listenTo(mouse.clicks) 
     reactions += { 
     case MouseClicked(_, p, _, 1, _) => { 
      mouseX = p.x 
      mouseY = p.y 
      mouseclicked = true 
      repaint 
     } 
     } 
    } 
    contents = canvas 
    } 
} 

我试着用g.setBackground(更换g.setColor(...)和g.fill(矩形)...)为在上面的注释,它编译,但不起作用。

有人建议可以以正确的方式做到这一点?

在此先感谢。

回答

3

最简单的办法就是让秋千做背景绘画

val canvas = new Panel { 
    opaque = true 
    background = Color.magenta 
    override def paintComponent(g: java.awt.Graphics2D) { 
    super.paintComponent(g); 
    g.setColor(Color.blue) 
    if (mouseclicked) { 
     g.fillOval(mouseX - 10, mouseY - 10, 20, 20) 
     mouseclicked = false 
    } 
    }