2014-02-17 1 views
0

스칼라의 스케이프에서 예제 6.9를보고 있는데, 프레임의 크기를 조절할 때 배경이 바뀌지 않으므로 배경 설정 방법이 적절하지 않습니다. 버전 2.10 작업에 대한 변경 사항을 업데이트 예제 코드입니다 (:스칼라에서 배경 설정하기 스윙

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 (RECT)를 교체 시도

...)와 같은 위의 주석, 그리고 컴파일하지만 작동하지 않습니다.

사람이 사전에?

덕분에이 작업을 수행하는 올바른 방법을 제안 할 수 있습니다.

답변

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 
    } 
    } 
관련 문제