【问题标题】:Swing EditorPane Scala size not workingSwing EditorPane Scala 大小不起作用
【发布时间】:2014-08-18 11:23:28
【问题描述】:

我用 scala.Swing 创建了下面的 EditorPane

import scala.swing.{Font, Color, EditorPane}

val textArea = new EditorPane() {
  font       = new Font("monospaced", java.awt.Font.PLAIN , 20 )
  background = Color.darkGray 
  foreground = Color.magenta 
  size       = new java.awt.Dimension(30,50)
}

运行上述代码会产生错误:

value size_= is not a member of scala.swing.EditorPane

在 scala.swing EditorPane API (http://www.scala-lang.org/api/2.10.4/index.html#scala.swing.EditorPane) 中,它指的是大小为 java.awt.Dimension 所以我不明白为什么我的代码是错误的。我也试过size.setSize(30,50),它可以编译,但EditorPane只有一行,这意味着没有正确设置大小。

这里有什么问题?

ps : 我有最新的 Scala 版本。

【问题讨论】:

  • 不太了解scala(我知道swing),但是为什么不调用java.awt.Dimension 构造函数而不是它的setSize() 方法呢? new java.awt.Dimension(30,50)。也许这导致了你的错误。
  • 不……还是搞不定。
  • 他还是正确的。 Dimension 类没有静态方法setSize。您只能在已经存在的Dimension 上调用setSize(d: Dimension): void。它也不返回Dimension。总之应该是size = new Dimension(30,50)

标签: swing scala


【解决方案1】:

EditorPane 像所有组件一样从UIElement 继承。

UIElement 提供了相关的setter方法,如:

minimumSize_=(x: Dimension)
maximumSize_=(x: Dimension)
preferredSize_=(x: Dimension)

还有一个size 方法,但没有设置器。这解释了你的错误。

我个人的解释:

最后,Layoutmanager 会处理所有组件的大小,你不应该手动干预。您可以用最小、最大和首选尺寸表达您的愿望。

您可以直接设置大小的唯一类是窗口和框架。

new MainFrame() { size = new Dimension(30,50) }

【讨论】:

  • 我不明白 hack 变通办法是什么意思 :)。但是我的程序看起来像这样prntscr.com/4dznyn
  • 如果你愿意,你可以在这里上传你的完整代码:pastebin.com,我会看看。似乎与布局有关。
  • 如果这 (prntscr.com/4e01z9) 是您想要的,这就是我更改的 (pastebin.com/fpbWtzet)。您也许应该更多地研究不同的布局面板并将它们组合起来以获得您想要的。
  • 是的,就是这样。非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 2018-10-06
  • 2011-12-06
  • 2018-05-02
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
相关资源
最近更新 更多