【问题标题】:In JavaFX, how can I bind two listview's so their selectedIndex is always the same?在 JavaFX 中,如何绑定两个列表视图,使它们的 selectedIndex 始终相同?
【发布时间】:2011-02-11 02:00:15
【问题描述】:

我有两个(或更多)并排的 ListView。我需要它们作为一个,所以每个选择的索引总是相同的。

【问题讨论】:

    标签: listview binding javafx selectedindex


    【解决方案1】:

    “反向绑定”似乎是一个选项:

    var a;
    var b = bind a with inverse;
    

    仅适用于简单的表达式。任何更复杂的东西都会产生警告/错误。

    除了不是因为 ListView 的 selectedIndex 是公开读取的(感谢更正)。

    你必须这样做:

    var lv1 = ListView {
    }
    var lv2 = ListView {
    }
    var sel1 = bind lv1.selectedIndex on replace {
        lv2.select(sel1);
    }
    var sel2 = bind lv2.selectedIndex on replace {
        lv1.select(sel1);
    }
    

    您可能还想在这里和那里添加一些 ifs 以避免额外的 select() 调用。

    【讨论】:

    • 我如何设置 selectedIndex 呢?根据 API,他们似乎没有写入权限。所以我不确定如何实现它。对不起!谢谢!
    • Honza,这行不通。 selectedIndex 仅是 RO 属性。你的下一个建议是无限循环。 (更好的说,导致 StackOverflowError)
    【解决方案2】:

    这应该可行:),也许。

    var lv1 = ListView {
    }
    var lv2 = ListView {
    }
    
    var onSync = false;    
    
    var sel1 = bind lv1.selectedIndex on replace {
        if (not onSync) {
            onSync = true;
            lv2.select(sel1);
            onSync = false;
        }
    }
    var sel2 = bind lv2.selectedIndex on replace {
        if (not onSync) {
            onSync = true;
            lv1.select(sel2);
            onSync = false;
        }
    }
    

    【讨论】:

    • 有意思,我试试看,谢谢你的回答!然而,另一件事是,我注意到在 JavaFX 1.2 中似乎无法操纵滚动条,因此我可能会选择第 100 个索引,但我无法看到它。 (据我所知。)谢谢!
    • 这绝对有效,非常感谢!唯一的问题是滚动条!
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2013-12-14
    • 2012-03-13
    • 2018-09-21
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多