我创建了一个表单来检查边距和填充对可滚动组件的影响。显然填充是滚动内容的一部分 - 我在任何地方都找不到。 是否可以合理地猜测还是应该记录下来?
无论如何 - 当列表向下滚动到结尾时会有一种奇怪的行为,我希望它像拉伸滚动一样滚动回内容,但事实并非如此。这是一个错误吗?
附带的代码演示了这一点 - +按钮为列表添加了按钮;向下滚动按钮滚动到最后一个条目 - 单击时列表处于奇怪的状态:
public class FormMarginPaddingScroll extends Form {
private int entrytally = 0;
public FormMarginPaddingScroll() {
setTitle("FormMarginPaddingScroll");
setScrollable(false);
Container contentPane = getContentPane();
contentPane.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
contentPane.setScrollableY(true);
Style style = contentPane.getAllStyles();
style.setMarginUnit(Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS);
style.setMargin(5, 5, 5, 5);
style.setPaddingUnit(Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS);
style.setPadding(5, 5, 5, 5);
style.setBorder(Border.createDashedBorder(1));
TextArea textArea = new TextArea("This form is for checking margin, border, padding and scrolling behaviour.");
textArea.setEditable(false);
contentPane.add(textArea);
{
FloatingActionButton floatingActionButton = FloatingActionButton.createFAB(FontImage2.MATERIAL_ARROW_DOWNWARD);
floatingActionButton.bindFabToContainer(contentPane, Component.LEFT, Component.BOTTOM);
floatingActionButton.addActionListener((e) -> scrollDown(contentPane));
}
{
FloatingActionButton floatingActionButton = FloatingActionButton.createFAB(FontImage2.MATERIAL_ADD);
floatingActionButton.bindFabToContainer(contentPane, Component.RIGHT, Component.BOTTOM);
floatingActionButton.addActionListener((e) -> newEntry(contentPane));
}
}
private void scrollDown(Container contentPane) {
Component componentLast = contentPane.getComponentAt(contentPane.getComponentCount() - 1);
contentPane.scrollRectToVisible(
componentLast.getX(),
componentLast.getY(),
componentLast.getWidth(),
contentPane.getHeight(),
componentLast);
}
private void newEntry(Container contentPane) {
final int entryid = ++entrytally;
Button button = new Button("" + entryid);
button.addActionListener((e) -> {
ToastBar.Status status = ToastBar.getInstance().createStatus();
status.setMessage("button " + entryid + " pressed");
status.setExpires(3000);
status.show();
});
contentPane.add(button);
contentPane.revalidate();;
}
}