【问题标题】:Programmatically select a tab of a Codename One Tabs object以编程方式选择 Codename One Tabs 对象的选项卡
【发布时间】:2019-05-23 12:00:42
【问题描述】:

要以编程方式选择 Codename One Tabs 对象的选项卡,以下代码就足够了:

tabs.setSelectedIndex(tabToSelect, true);

问题是这段代码选择了想要的选项卡,但它没有水平滚动选项卡按钮容器以使选项卡名称可见(如果它不可见,因为有很多选项卡)。请注意,我使用的是主题常量 tabsGridBool: false;

因为这个问题,我试着这样解决:

tabs.setSelectedIndex(tabToSelect, true);
tabs.scrollComponentToVisible(tabs.getTabsContainer().getComponentAt(tabToSelect));

但它不起作用。选择选项卡及其按钮的正确方法是什么?谢谢

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    我试过了,它对我有用,这可能是操作的顺序:

    Form hi = new Form("Tabs", new BorderLayout());
    Tabs t = new Tabs();
    hi.add(CENTER, t);
    
    for(int iter = 1 ; iter < 20 ; iter++) {
        t.addTab("Tab " + iter, FontImage.MATERIAL_ACCESS_ALARM, 4, new Label("Tab " + iter));
    }
    
    Button test = new Button("Test");
    test.addActionListener(e -> {
        t.getTabsContainer().getComponentAt(18).requestFocus();
        t.setSelectedIndex(18, true);
    });
    hi.add(SOUTH, test);
    hi.show();
    

    【讨论】:

    • 谢谢,在这种情况下requestFocus 有效,而scrollToVisible 无效。但是,为了在我的应用程序中解决这个问题,我需要延迟 100 毫秒 requestFocus(使用计时器),否则它不起作用。请注意,我在更改选项卡之前立即更改了表单,这可能是需要延迟的原因。
    • 不要延迟尝试在表单上使用显示侦听器,该侦听器应在转换完成后调用。
    猜你喜欢
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多