นี่เป็นการทดลองครั้งแรกของฉันโดยใช้ Swing กับ Scala และมีคำถามสองสามข้อเกี่ยวกับโค้ดของฉันด้านล่าง สิ่งที่คุณทำได้ก็คือสร้างหน้าต่างที่มีสี่เหลี่ยมสีที่เปลี่ยนสีได้ โปรดอย่าลังเลที่จะตอบคำถามหนึ่งหรือคำถามใด ๆ
1) ฉันใช้ Java ActionListener ด้านล่างเพราะฉันไม่สามารถหาวิธีให้ javax.swing.Timer ทำงานเป็นผู้เผยแพร่ได้ มีวิธีใช้โมเดล Scala เช่น listenTo()
- หรือนี่คือวิธีที่จะทำ
2) ดูเหมือนว่าค่า preferredSize
ที่ถูกลบล้างของฉันในแผงควบคุมไม่ทำงาน: หน้าต่างย่อเล็กสุด ในเวอร์ชัน Java ของฉัน ฉันแทนที่วิธี getPreferredSize
แต่ไม่มีวิธีดังกล่าวใน Panel ดังนั้นฉันจึงถือว่านี่เป็นวิธีที่จะทำ แต่ทำไมมันถึงไม่ทำงาน
3) paintComponent
ไม่ได้รับการบันทึกไว้เลยในเอกสารประกอบ Scala API ฉันคิดว่านี่เป็นเพราะมันมีการเข้าถึง protected
ใน Java แต่ดูเหมือนว่าจะเป็นการกำกับดูแล ฉันถูกต้องหรือไม่ที่จะแทนที่ paintComponent หรือถูกซ่อนไว้เพราะฉันควรใช้วิธี paint
ที่จัดทำเป็นเอกสารแทน
4) Scala ดูเหมือนจะไม่มีวิธี getWidth()
และ getHeight()
ในส่วนประกอบ - เป็นมาตรฐานที่จะใช้ size.width
และ 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()
}