Codenameone 滚动结束时有趣的滚动行为

Codenameone 滚动结束时有趣的滚动行为,codenameone,Codenameone,我创建了一个表单来检查可滚动组件上边距和填充的效果。显然,填充是滚动内容的一部分——我在任何地方都找不到文档。 人们应该能够合理地猜测,还是应该对此进行记录 无论如何,当向下滚动列表超过其末尾时,会出现一种奇怪的行为,我本以为它会像拉伸滚动一样滚动回内容,但事实并非如此。是虫子吗 所附的代码演示了这一点,-按钮将按钮添加到列表中;向下按钮滚动到最后一个条目-单击时,列表处于奇怪状态: public class FormMarginPaddingScroll extends Form {

我创建了一个表单来检查可滚动组件上边距和填充的效果。显然,填充是滚动内容的一部分——我在任何地方都找不到文档。 人们应该能够合理地猜测,还是应该对此进行记录

无论如何,当向下滚动列表超过其末尾时,会出现一种奇怪的行为,我本以为它会像拉伸滚动一样滚动回内容,但事实并非如此。是虫子吗

所附的代码演示了这一点,-按钮将按钮添加到列表中;向下按钮滚动到最后一个条目-单击时,列表处于奇怪状态:

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();;
    }
}

添加多个FloatingActionButton也会出现问题。它们似乎以某种方式分组。添加组件后是否尝试重新验证容器?添加按钮后,我更改了代码并立即调用
contentpane.revalidate()
。这似乎没有什么区别。填充通常是组件空间的一部分。组件滚动的行为主要是一个实现细节,因为我们在容器上默认为0填充/边距。据我所知,问题是因为您对内容窗格设置了填充?如果你把一切都搞定了?你们试图通过填充来实现什么?我试图理解滚动是怎么回事。我特别感兴趣的是防止可滚动容器包含可调整大小的元素时出现错误行为。当一个可滚动的容器大于它的可见大小并且在增长时,一切都正常。但当可滚动容器收缩时,会产生不愉快的效果。我想在容器的末端放置一个不可见的组件,或者使用填充。添加多个FloatingActionButton也不太合适。它们似乎以某种方式分组。添加组件后是否尝试重新验证容器?添加按钮后,我更改了代码并立即调用
contentpane.revalidate()
。这似乎没有什么区别。填充通常是组件空间的一部分。组件滚动的行为主要是一个实现细节,因为我们在容器上默认为0填充/边距。据我所知,问题是因为您对内容窗格设置了填充?如果你把一切都搞定了?你们试图通过填充来实现什么?我试图理解滚动是怎么回事。我特别感兴趣的是防止可滚动容器包含可调整大小的元素时出现错误行为。当一个可滚动的容器大于它的可见大小并且在增长时,一切都正常。但当可滚动容器收缩时,会产生不愉快的效果。我想在容器的末端放置一个不可见的组件,或者使用填充。