2011-08-05 9 views
4

私はパネルで簡単なアプリケーションを持っています。私はそれをクリックすると一時停止して再描画したいと思います。私の知る限り、私はここに再帰的な何もしていないよ言うことができるように再帰値には型が必要です - Scala Swing

error: recursive value repainter needs type 
val r: Boolean = repainter.isRunning 

object ModulusPatterns extends SimpleSwingApplication { 
    var delay_ms = 200 

    def top = new MainFrame { 
    contents = panel 
    } 

    val panel = new Panel { 
    override def paintComponent(g: Graphics2D) { /* draw stuff */ } 
    listenTo(mouse.clicks) 
    reactions += { 
     case e: MouseClicked => { 
     val r: Boolean = repainter.isRunning 
     if (r) repainter.stop() else repainter.start() 
     } 
    } 
    } 

    val repainter = new Timer(delay_ms, new ActionListener { 
    def actionPerformed(e: ActionEvent) { 
     panel.repaint 
    } 
    }) 

    repainter.start() 
} 

私はval r定義行でコンパイル・エラーが発生します。バグですか?回避策はありますか?

答えて

7

ここまで再帰的なことはしていません。

はい、あなたは以下のとおりです。panelの定義はrepainterを指し、repainterの定義はpanelを指します。だから、バグはなく、あなたはそれらの型を指定する必要があります。

+2

私は 'panel'または' repainter'のいずれかのタイプを指定する必要があるようです。コンパイラは問題が 'val r = ...'行にあると私に少し混乱させました。私はそれがここでタイプ自体を推論することができないことに驚いています。 –

関連する問題