gpt4 book ai didi

swing - Scala Swing 新手问题

转载 作者:行者123 更新时间:2023-12-04 06:19:23 31 4
gpt4 key购买 nike

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

App window

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()
}

最佳答案

  • 没有立即答复。但是你的方法肯定没问题。我不明白为什么你的观察员应该是小组。我会创建一个匿名 ActionListener直接使用计时器,而是向该面板添加特定方法,例如 def animateColor() { ... }
  • 您可以使用 preferredSize = new Dimension(200, 200)
  • 根据这个准官方文档,是的:http://www.scala-lang.org/sid/8 (第6款自定义绘画)
  • 实例化一个新的 Dimension 确实有点愚蠢每时每刻。但是如果你仔细看一下 SID 的例子,它的作用是一样的,使用 size.height .在超高性能代码中,你可能想直接调用底层peer(peer.getWidth)
  • 关于swing - Scala Swing 新手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6797757/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com