当我单击“远离Smalltalk”时,视图变为白色

当我单击“远离Smalltalk”时,视图变为白色,smalltalk,visualworks,Smalltalk,Visualworks,您好,我有一个主要的应用程序,它可以画一个圆和一个矩形,但是当我点击时,它们就消失了。这是我使用的代码 initialize shapesView := ShapesView new. shapesModel := ShapesModel new. shapesView model: shapesModel. 我有组件的初始化 postOpenWith: aBuilder shapesView initializeComponents. 在ShapeView类中,我有一个模型访问器和这个方

您好,我有一个主要的应用程序,它可以画一个圆和一个矩形,但是当我点击时,它们就消失了。这是我使用的代码

initialize
shapesView := ShapesView new.
shapesModel := ShapesModel new.
shapesView model: shapesModel. 
我有组件的初始化

postOpenWith: aBuilder
shapesView initializeComponents.
在ShapeView类中,我有一个模型访问器和这个方法,我的模型和控制器仍然是空的

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.

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

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

正如您所发现的,为了使形状持久化,图形应该处于 ShapeView类(实例端)中的“displayOn:gc”方法(如JayK所述),该方法应执行您指定的图形: gc油漆:ColorValue红色

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

形状显示Filledon:gc

gc油漆:ColorValue蓝色

形状:=我的圆心:100@100半径:50

形状显示Filledon:gc

形状可以在InitializeComponents中创建,但只要需要重新显示视图,api就会调用displayOn:。
更改模型或调整窗口大小将导致无效并重新显示。
hth-Arden Thomas

正如您所发现的,为了使形状持久化,绘图应该在 ShapeView类(实例端)中的“displayOn:gc”方法(如JayK所述),该方法应执行您指定的图形: gc油漆:ColorValue红色

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

形状显示Filledon:gc

gc油漆:ColorValue蓝色

形状:=我的圆心:100@100半径:50

形状显示Filledon:gc

形状可以在InitializeComponents中创建,但只要需要重新显示视图,api就会调用displayOn:。
更改模型或调整窗口大小将导致无效并重新显示。
这是VisualWorks Smalltalk吗?我的猜测是,您必须将绘图代码放入一个定期调用的方法中,而不是在初始化视图时只调用一次。如果我浏览正确,您应该覆盖ShapeView中的
displayOn:
。这看起来像海豚。无论如何,你应该知道你使用的是哪种Smalltalk方言(并为它添加一个标签)为了得到一个好的答案,问题是一方面我需要覆盖显示:另一方面我需要在正确的时间使模型失效,以确保当有其他操作时形状不会消失这是VisualWorks Smalltalk吗?我的猜测是,您必须将绘图代码放入一个定期调用的方法中,而不是在初始化视图时只调用一次。如果我浏览正确,您应该覆盖ShapeView中的
displayOn:
。这看起来像海豚。无论如何,你应该知道你使用的是哪种Smalltalk方言(并为它添加了一个标签),以便得到一个好的答案。问题是,一方面我需要覆盖displayOn:另一方面,我需要在正确的时间使模型无效,以便在有其他操作时形状不会消失