smalltalk - 如何改变变形位置

标签 smalltalk pharo squeak morphic

我有两种变形,一种在另一种中。

a:= Morph new.
b:= Morph new. 
a addMorph: b. 
a openInWorld.

但是当我想通过执行 b position: 100@100 来更改 b 的位置时,它永远不会显示更改,那么我在这里错过了什么?还是以某种方式 a 有责任跟踪 b 的位置?

最佳答案

这应该有效:

| morph1 morph2 |

morph1 := Morph new.
morph1 color: Color red.
morph1 extent: 200@200.

morph2 := Morph new.
morph2 color: Color green.
morph2 extent: 50@50.

morph1 addMorph: morph2.
morph2 position: 100@100.
morph1 openInWorld.

结果:

enter image description here

请注意,位置是绝对的,如果您想要相对位置,则必须执行以下操作:
morph2 position: (morph1 position + (100@100))

如果您将 Morphs 添加到窗口,您可以查看 SystemWindow #addMorph:fullFrame: 它提供了更好的定位 submorphs 的可能性。 Morph 还实现了 #addMorph:fullFrame: 但不知何故,这在 Pharo 2.0 中似乎对我不起作用。

看看:Pharo collaborActive book
并在 Pharo by Example 2 的 Basic Widgets 章节。

关于smalltalk - 如何改变变形位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15773188/

相关文章:

smalltalk - Cog VM 和间接变量访问

ruby - 寻找 "real"使用延续的例子

pharo - 在 UI 之外使用形态步骤方法

linux - 甚至无法在 CentOS 6.5 上安装 Pharo 3

smalltalk - 如何用锌运行 cometd (海边)

model-view-controller - 在 squeak 中编写 GUI

programming-languages - 寻找可以编写代码的编程语言 "in the debugger"

ruby - 在 Ruby 中,是否有与 Smalltalk 中等效的 printNl 方法?

smalltalk - 检查对象是否是给定类或其子类的实例

smalltalk - Squeak Smalltalk,为什么有时简化的方法不起作用?