1

您好,所以我有一个绘制圆形和矩形的主应用程序,但是当我点击离开时,它们就消失了,这是我使用的代码

initialize
shapesView := ShapesView new.
shapesModel := ShapesModel new.
shapesView model: shapesModel. 

我有组件初始化

postOpenWith: aBuilder
shapesView initializeComponents.

在 ShapesView 类中我有一个模型访问器和这个方法,我的模型和控制器仍然是空的

initializeComponents
| shape gc|
gc := self graphicsContext.
gc paint: ColorValue red.
shape := MyRectangle origin: 2@2 extent: 50@75.
shape displayFilledOn: gc.
gc paint: ColorValue blue.
shape := MyCircle center: 100@100 radius: 50.
shape displayFilledOn: gc.
4

2 回答 2

0

您需要做的是找出当 UI 元素再次获得焦点时发送的方法。如何做到这一点因 Smalltalk 方言而异。顺便说一句,您现在已经实现了这一点,这意味着您只需绘制一次。这并不意味着它正在被重绘。

于 2017-10-16T08:42:29.067 回答
0

如您所见,要使形状持久,绘图应该在 ShapeView 类(实例端)中的“displayOn:gc”方法(如 JayK 提到的)中,它应该执行您指定的绘图:gc paint: ColorValue red .

形状 := MyRectangle 原点:2@2 范围:50@75。

形状 displayFilledOn: gc.

gc 油漆:ColorValue 蓝色。

形状 := MyCircle 中心:100@100 半径:50。

形状 displayFilledOn: gc.

形状可以在 intializeComponents 中创建,但 api 调用 displayOn: 每当需要重新显示视图时。
更改模型或调整窗口大小将导致失效并重新显示。hth - 雅顿托马斯

于 2017-10-18T04:35:16.277 回答