Ini adalah percobaan pertama saya menggunakan Swing dengan Scala, dan ada beberapa pertanyaan tentang kode saya di bawah ini. Yang dilakukannya hanyalah menghasilkan jendela dengan persegi panjang berwarna yang berubah warna. Silakan menjawab salah satu atau salah satu pertanyaan.
1) Saya menggunakan Java ActionListener di bawah ini karena saya tidak tahu cara membuat javax.swing.Timer berfungsi sebagai Publisher. Apakah ada cara untuk menggunakan model Scala, yaitu listenTo()
- atau ini cara melakukannya?
2) Nilai preferredSize
saya yang diganti di Panel sepertinya tidak berfungsi: jendela muncul diminimalkan. Di versi Java saya mengganti metode getPreferredSize
, tetapi tidak ada metode seperti itu di Panel, jadi saya berasumsi ini adalah cara untuk melakukannya, tetapi mengapa tidak berhasil?
3) paintComponent
tidak didokumentasikan sama sekali dalam dokumentasi Scala API. Saya berasumsi ini karena aksesnya protected
di Java, tetapi sepertinya ini adalah kekeliruan. Apakah saya benar untuk mengganti paintComponent atau disembunyikan karena saya seharusnya menggunakan metode paint
yang terdokumentasi?
4) Scala sepertinya tidak memiliki metode getWidth()
dan getHeight()
pada komponen - apakah standar menggunakan size.width
dan size.height
?
import swing._
import java.awt.{Graphics, Color}
import java.awt.event.{ActionEvent, ActionListener}
import javax.swing.Timer
object ColorPanel extends SimpleSwingApplication {
private var c: Color = new Color(0)
def top = new MainFrame {
title = "Flash!"
contents = p
}
val p = new Panel with ActionListener {
override val preferredSize = new Dimension(200, 200)
override def paintComponent(g: Graphics2D) {
g.setColor(c)
g.fillRect(0, 0, size.width, size.height)
}
def actionPerformed(e: ActionEvent) {
c = new Color((c.getRGB() + 1000) % 16777216)
repaint
}
}
val timer = new Timer(100, p)
timer.start()
}