2011-08-08 18 views

cevap

16

O Swing zor değil - kesip aşağıya yapıştırın. Renkleri istemiyorsanız veya herhangi bir boyut penceresine çizme veya her zaman aynı boyutta olmanız durumunda biraz basitleştirebilirsiniz.

:

import swing.{Panel, MainFrame, SimpleSwingApplication} 
import java.awt.{Color, Graphics2D, Dimension} 

object Draw extends SimpleSwingApplication { 

    val data = // put data here 

    def top = new MainFrame { 
    contents = new DataPanel(data) { 
     preferredSize = new Dimension(300, 300) 
    } 
    } 
} 

Kişisel veriler, verecekti

val data = Array.ofDim[Color](25, 25) 

    // plot some points 
    data(0)(0) = Color.BLACK 
    data(4)(4) = Color.RED 
    data(0)(4) = Color.GREEN 
    data(4)(0) = Color.BLUE 

    // draw a circle 
    import math._ 
    { 
    for { 
     t <- Range.Double(0, 2 * Pi, Pi/60) 
     x = 12.5 + 10 * cos(t) 
     y = 12.5 + 10 * sin(t) 
     c = new Color(0.5f, 0f, (t/2/Pi).toFloat) 
    } data(x.toInt)(y.toInt) = c 
    } 

gibi bir şey olabilir:

class DataPanel(data: Array[Array[Color]]) extends Panel { 

    override def paintComponent(g: Graphics2D) { 
    val dx = g.getClipBounds.width.toFloat/data.length 
    val dy = g.getClipBounds.height.toFloat/data.map(_.length).max 
    for { 
     x <- 0 until data.length 
     y <- 0 until data(x).length 
     x1 = (x * dx).toInt 
     y1 = (y * dy).toInt 
     x2 = ((x + 1) * dx).toInt 
     y2 = ((y + 1) * dy).toInt 
    } { 
     data(x)(y) match { 
     case c: Color => g.setColor(c) 
     case _ => g.setColor(Color.WHITE) 
     } 
     g.fillRect(x1, y1, x2 - x1, y2 - y1) 
    } 
    } 
} 

Sonra Salıncak uygulamasını yapmak:

bir panel sınıfını tanımlamak

enter image description here

Mevcut dizinizdeki renklere eşlemek için map işlevini kolayca kullanabilirsiniz.

+0

Teşekkürler. Kodu da gözden geçirin. –

+1

Performans açısından kritik olan her şey için kavrayışlardan kaçınmanız gerektiğini unutmayın. Optimize edilmezler. – hishadow