Vaadin:TextArea 滚动不起作用

Dmy*_*tov 1 textarea vaadin

我有类似于此代码的内容:

TextArea textArea = new TextArea();
textArea.setSizeFull();
Panel dataPanel = new Panel("Panel", textArea);
dataPanel.setSizeFull();
textArea.setValue(... some very long text...);
Run Code Online (Sandbox Code Playgroud)

问题是这个TextArea出现时没有垂直滚动条(并且鼠标滚轮滚动也不起作用),尽管内部文本比 TextArea 高度长(我可以使用光标和键盘向下箭头向下导航)。

如何在此组件中启用滚动?

Mor*_*fic 5

有点奇怪,但根据文档,如果您在文本区域中禁用自动换行,您将获得垂直滚动条:

自动换行

setWordwrap() 设置当行长度达到书写区域的宽度时是否换行(true - 默认)。如果自动换行被禁用 (false),则会出现一个垂直滚动条。自动换行只是一个视觉特征,换行不会在字段值中插入换行符;缩短换行将撤消换行。

以下代码示例说明了 Vaadin 8.0.6 的这种行为。请注意我的课程扩展Panel以匹配您的样本,但此时您可以将其删除:

public class PanelWithScrollableTextField extends Panel {
    public PanelWithScrollableTextField() {
        TextArea textArea = new TextArea();
        textArea.setWordWrap(false);
        textArea.setSizeFull();
        setContent(textArea);
        setSizeFull();

        StringBuffer buffer = new StringBuffer();
        IntStream.range(1, 100).forEach(value -> buffer.append(value).append("\r\n"));
        textArea.setValue(buffer.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

文本区域滚动


PS我知道这有点奇怪,但是面板用于滚动大于面板大小的表面,所以如果我们让它工作,你将滚动文本区域本身,而不是它的内容。您可以在下面查看示例以更好地理解我的意思:

public class PanelWithScrollableTextField extends Panel {
    public PanelWithScrollableTextField() {
        TextArea textArea = new TextArea();
        textArea.setWordWrap(false);
        textArea.setHeight("500px"); // fixed size with height larger than the panel
        setContent(textArea);
        setHeight("100px"); // fixed height smaller than the content so we get a scroll bar

        StringBuffer buffer = new StringBuffer();
        IntStream.range(1, 100).forEach(value -> buffer.append(value).append("\r\n"));
        textArea.setValue(buffer.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

面板滚动