我目前正在Codename One中编写一个简单的游戏,我希望用户选择国家 .
我希望各国在可滚动列表中表示为图像 .
我在X轴上有一个带BoxLayout的容器,里面有带图标的按钮 .
问题是,不适合容器的列表项正在被裁剪,并且在应该的时候不会被绘制 . 此外,当手指在未拉伸的物品上方时,容器不可滚动 .
And here how it looks like after scroll
以下是来源:
final Container cont_nations = new Container(new BoxLayout(BoxLayout.X_AXIS));
int buttons_width = dim_nation_man.getWidth() * 5;
cont_nations.setPreferredW(buttons_width + 50);
cont_nations.setPreferredH(dim_nation_man.getHeight());
cont_nations.setX(Main.screenWidthHalf - buttons_width / 2);
cont_nations.setY(choiseImage.getY() + dim_choise.getHeight() + Main.cellSize * 0);
cont_nations.setScrollSize(new Dimension(man_size * imgName_nations.length, man_size));
cont_nations.setScrollable(true);
//cont_nations.setScrollVisible(false);
addComponent(cont_nations);
for (int i = 0; i < img_nations.length; i++) {
final Button btn_nation = new Button(img_nations[i][0].image);
cont_nations.addComponent(btn_nation);
}
我明白我做错了什么 . 也许我不应该使用Container,或者我应该用其他方式填充孩子或者为孩子使用另一个 class . 但我找不到任何有关错误的信息 .
EDIT
我尝试了Shai Almog的建议只使用setScrollableX(),但这并不是我需要的 . Container移动到左上角,不可滚动 .
首先,我需要此滚动位于特定位置并具有特定大小,因此我使用CoordinateLayout作为Container的父级 . 这就是我使用setPreferredH()使用setX(),setY()和setPreferredW()的原因 .
2 回答
是否只想在X轴上滚动?
删除所有这些代码:
按钮将根据其图标大小进行调整,因此您无需触摸它 . 设置位置将不起作用,因为布局管理器将确定 .
只需使用:
注意
X
到底......为了完整性,由于您的意见,我添加了一个完整的工作示例,证明了这一点:
我已经对BorderLayout和CoordinateLayout源代码进行了一些调查,但我找不到任何问题 . 它们都正确地为子节点调用setWidth()和setHeight()方法 .
但是,我注意到,如果我将我的Container放入BorderLayout,滚动按需要工作,所以我想到了一个想法,用我的Scrollable Container创建一个BorderLayout容器并将它放在应该的位置 .
我仍然认为CoordinateLayout中存在一个错误,有一天我会试着找到它 .
现在代码看起来像这样,它的工作原理: