Это мой первый эксперимент с использованием Swing со Scala, и у меня есть несколько вопросов о моем коде ниже.Все, что он делает, это создает окно с цветным прямоугольником, который меняет цвет.Пожалуйста, не стесняйтесь отвечать на один или любой из вопросов.
1) Я использовал Java ActionListener ниже, потому что я не мог понять, как получить javax.swing.Timerработать издателем.Есть ли способ использовать модель Scala, например listenTo()
- или это способ сделать это?
2) Мое переопределенное значение preferredSize
в Panel не работает: окноподходит к минимуму.В моей версии 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()
}