Morphic:自动调整滚动窗格中包含的组框的大小?

use*_*928 5 smalltalk squeak pharo morphic

使用Pharo 1.4夏季进行测试.我认为最好用截图来解释它,代码如下.

这是我的初始状态(我现在用我的代码得到的):

初始状态

我希望在打开时水平填充组框变形,如下所示:

初始期望状态

调整大小后,我希望组框变形以保持边界,即:

调整所需状态的大小

这是我试过的代码:

| s morph1 morph2 row groupBox scroller |
s := ScrollPane new.
morph1 := BorderedMorph new.
morph2 := BorderedMorph new.
row := UITheme builder newRow: {morph1 . morph2}.
groupBox := UITheme builder newGroupbox: 'Group Box Test' for: row.
    groupBox 
        layoutFrame: (LayoutFrame fractions: (0 @ 0 corner: 1 @ 0.8));
        vResizing: #spaceFill;
        hResizing: #spaceFill;
        layoutChanged.
scroller := s scroller.
scroller 
    addMorph: (groupBox position: 0@0)
    fullFrame: (0 @ 0 corner: 0.8@0.5).
s scroller color: Color white.
s
 extent: 250@150;
 openCenteredInWorld
Run Code Online (Sandbox Code Playgroud)

容器必须是ScrollPane.

我已经修改了Bert的代码,不使用Polymorph UIBuilder,导致:

morph1 := Morph new.
morph2 := Morph new.
row := ScrollPane new.
row
    color: Color white; borderColor: Color gray; borderWidth: 1;
    layoutPolicy: ProportionalLayout new.
row scroller
    addMorph: morph1 fullFrame: (LayoutFrame fractions: (0@0 corner: 1@0) offsets: (5@5 corner: -60@45));
    addMorph: morph2 fullFrame: (LayoutFrame fractions: (1@0 corner: 1@0) offsets: (-50@5 corner: -5@45)).
row
    extent: 250@150;
    openInHand
Run Code Online (Sandbox Code Playgroud)

但也不起作用,因为内部蓝色变形重叠并且没有填充指定的帧.我尝试了很多使用框架的组合但到目前为止没有任 你知道我错过了什么吗?

Her*_*nán 3

使用 UIBuilder 你不需要手动创建滚动条。通过调整大小直到自动出现垂直或水平滚动条来检查以下脚本。

| dialog morphList row morph1 morph2 morph3 morph4 |

morph1 := BorderedMorph new hResizing: #spaceFill.
morph2 := BorderedMorph new.
morph3 := BorderedMorph new.
morph4 := BorderedMorph new.
row := UITheme builder newRow: {morph1 . morph2 . morph3}.
morphList := UITheme builder 
    newMorphListFor: (ListModel new list: {row . morph4})
    list: #list 
    getSelected: #selectionIndex 
    setSelected: #selectionIndex:
    help: 'This is a morph list'.
dialog := UITheme builder newWindowFor: nil title: 'titleString'.
dialog addMorph: morphList fullFrame: (LayoutFrame fractions: (0@0 corner: 1@0.5)).
dialog openInWorld
Run Code Online (Sandbox Code Playgroud)