Smalltalk 变形:自动调整滚动窗格中包含的组框的大小?
夏季使用Pharo 1.4进行测试。我认为最好用截图来解释,代码如下 这是我的初始状态(我现在用代码得到的): 我希望组框变形在打开时水平填充,如下所示: 调整大小后,我希望组框变形保持边界,即: 这是我尝试过的代码:Smalltalk 变形:自动调整滚动窗格中包含的组框的大小?,smalltalk,pharo,squeak,morphic,Smalltalk,Pharo,Squeak,Morphic,夏季使用Pharo 1.4进行测试。我认为最好用截图来解释,代码如下 这是我的初始状态(我现在用代码得到的): 我希望组框变形在打开时水平填充,如下所示: 调整大小后,我希望组框变形保持边界,即: 这是我尝试过的代码: | s morph1 morph2 row groupBox scroller | s := ScrollPane new. morph1 := BorderedMorph new. morph2 := BorderedMorph new. row := UITheme b
| 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
容器必须是滚动窗格
我已将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
但也不起作用,因为内部蓝色变形重叠且未填充指定帧。我尝试了许多使用框架的组合,但到目前为止没有任何效果。你知道我遗漏了什么吗?你遗漏了按比例排列不使用#空格填充等。因此,请使用TableLayout:
morph1 := Morph new hResizing: #spaceFill.
morph2 := Morph new.
row := Morph new
color: Color white; borderColor: Color gray; borderWidth: 1;
layoutPolicy: TableLayout new;
layoutInset: 5; cellInset: 5;
listDirection: #leftToRight;
addAllMorphs: {morph1. morph2};
extent: 250@150;
openInHand
或带有偏移的比例标注,这是混合固定宽度和相对标注的方式:
morph1 := Morph new.
morph2 := Morph new.
row := Morph new
color: Color white; borderColor: Color gray; borderWidth: 1;
layoutPolicy: ProportionalLayout new;
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));
extent: 250@150;
openInHand
我在没有UITheme的Squeak中尝试了这一点,因此直接使用变形。使用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
我已经编辑了我的问题,添加了代码的适配器版本,但它似乎也不起作用。也许这是一个滚动窗格错误?