Scala swing新手问题

Scala swing新手问题,swing,scala,timer,Swing,Scala,Timer,这是我第一次使用Swing和Scala进行实验,我对下面的代码有一些疑问。它所做的只是制作一个带有彩色矩形的窗口,可以改变颜色。请随时回答一个或任何问题 1) 我使用了下面的Java ActionListener,因为我不知道如何让javax.swing.Timer作为发布者工作。有没有一种方法可以使用Scala模型,即listenTo()——或者这就是使用Scala模型的方法 2) 面板中我被覆盖的preferredSize值似乎不起作用:窗口显示为最小化。在我的Java版本中,我覆盖了ge

这是我第一次使用Swing和Scala进行实验,我对下面的代码有一些疑问。它所做的只是制作一个带有彩色矩形的窗口,可以改变颜色。请随时回答一个或任何问题

1) 我使用了下面的Java ActionListener,因为我不知道如何让javax.swing.Timer作为发布者工作。有没有一种方法可以使用Scala模型,即
listenTo()
——或者这就是使用Scala模型的方法

2) 面板中我被覆盖的
preferredSize
值似乎不起作用:窗口显示为最小化。在我的Java版本中,我覆盖了
getPreferredSize
方法,但是面板中没有这样的方法,所以我假设这是实现它的方法,但是为什么它不工作呢

3)
paintComponent
在Scala API文档中根本没有记录。我认为这是因为它在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()
}
  • 没有立即的答复。但你的方法肯定是可以的。我不明白为什么你的观察员应该是专家组成员。我将直接使用计时器创建一个匿名
    ActionListener
    ,并向该面板添加一个特定的方法,如
    def animateColor(){…}
  • 您可以使用
    preferredSize=新维度(200200)
  • 根据该准官方文件,是:(第6节定制绘画)
  • 一直实例化一个新的
    维度
    确实有点愚蠢。但是如果你仔细看这个例子,SID也会使用
    size.height
    。在超高性能代码中,您可能希望直接调用底层对等方(
    peer.getWidth