代号一号 - 滚动组 手风琴 切换按钮的滚动



i具有嵌套componentGroup Aquipions Toggle按钮的表单(带有BoxLayout.Y(。当用户扩展手风琴(在组件组内(时,切换按钮的列表(手风琴内部(很长,并且不适合屏幕。

问题是表格(由ComponentGroup Actiarions Toggle按钮占用(是不可滚动的,我想是因为触摸的含义存在歧义(这可能是为了选择列表的项目或进行操作滚动(。但是,我想在用户的脑海中,没有真正的歧义:如果用户进行简单的点击,那么他/她正在选择一个项目;如果用户进行点击,然后移动手指而不停止敲击,则他/她正在尝试进行滚动。我想这是用户脑海中的预期行为...否则,如果主要组件组占据了所有屏幕,则滚动变得不可能(这就是我的情况(。

目前,我发现了一个部分不满意的解决方案,在主组件组中添加了一些毫米填充物,因此屏幕边界上几乎没有空间可以进行滚动。但是,这不是直观的,因为用户通常希望能够在表格的任何地方滚动。

我的问题是如何以所有形式启用滚动。

以下代码是代码结构的示例。实际代码是由我编写的复杂解析器生成的,该复杂解析器从JSON输入中自动生成UI:

Form hi = new Form("Hi World", BoxLayout.y());
// Warning: you need to set the theme property "ComponentGroupBool" to true
Button button1 = new Button("Button 1", "ButtonMenuCategories");
CheckBox button11 = CheckBox.createToggle("Button 1.1");
CheckBox button12 = CheckBox.createToggle("Button 1.2");
Button button13 = new Button("Button 1.3", "ButtonMenuCategories");
CheckBox button131 = CheckBox.createToggle("Button 1.3.1");
CheckBox button132 = CheckBox.createToggle("Button 1.3.2");
CheckBox button133 = CheckBox.createToggle("Button 1.3.3");
CheckBox button14 = CheckBox.createToggle("Button 1.4");
Button button2 = new Button("Button 2", "ButtonMenuCategories");
Button button3 = new Button("Button 3", "ButtonMenuCategories");
Button button4 = new Button("Button 4", "ButtonMenuCategories");
Button button5 = new Button("Button 5", "ButtonMenuCategories");
Accordion accordion13 = new Accordion();
accordion13.addContent(button13, FlowLayout.encloseCenter(ComponentGroup.enclose(button131, button132, button133)));
Accordion accordion1 = new Accordion();
accordion1.addContent(button1, FlowLayout.encloseCenter(ComponentGroup.enclose(button11, button12, accordion13, button14)));
Accordion accordion2 = new Accordion();
accordion2.addContent(button2, new Label("Hello"));
Accordion accordion3 = new Accordion();
accordion3.addContent(button3, new Label("Hello"));
Accordion accordion4 = new Accordion();
accordion4.addContent(button4, new Label("Hello"));
Accordion accordion5 = new Accordion();
accordion5.addContent(button5, new Label("Hello"));
Container menu = FlowLayout.encloseCenter(ComponentGroup.enclose(accordion1, accordion2, accordion3, accordion4, accordion5));
hi.add(menu);
hi.show(); 

Form内容窗格默认情况下是可以滚动的,除非您使用setScrollableY(false)明确将其禁用。当您设置BorderLayout时,这也是为您隐含的。由于您使用BoxLayout Form的内容是可滚动的(大多数情况下应该是(。

但是,Accordion也可滚动,这意味着您有两个可嵌套的可滚动组件。我很难想象您在这里看到的/感觉,但是有一个明显的错误,您缺少了:

accordion13.setScrollableY(false);
accordion1.setScrollableY(false);
accordion2.setScrollableY(false);
//... etc ...

最新更新