Это мой первый эксперимент с использованием 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()
}