【问题标题】:Codename One : Get the current visible image index from a DefaultListModel included in an ImageViewer代号一:从包含在 ImageViewer 中的 DefaultListModel 获取当前可见图像索引
【发布时间】:2016-05-25 18:09:37
【问题描述】:

我正在构建一个应用程序,该应用程序利用 LayeredLayout 将 2 个 ImageViewer 显示在彼此之上。较深的 ImageViewer 包含捕获的图像(照片),而较浅的 ImageViewer 包含用户可以通过滑动更改的装饰。

所以装饰图像存储在这样的 ArrayList 中:

decorationImageList = new ArrayList<Image>();

    // On filtre les décorations qu'on ajoute à la liste 
    for (String png : res.getImageResourceNames()) {
        if (png.endsWith("-ratio-4-3.png")) {
                decorationImageList.add(res.getImage(png));
        }
    }

然后在 StateMachine 中,我将它们加载到装饰 ImageViewer 中,如下所示:

DefaultListModel<Image> decorationModel = new DefaultListModel<Image>(decorationImageList);
findDecorationIV().setImageList(decorationModel);

到目前为止,它按预期工作,用户可以滑动更改装饰。

但是我需要知道用户选择了哪种装饰(即当前对用户可见/显示的装饰)。

我尝试将侦听器添加到装饰 ImageViewer 以计算滑动的次数和方向,但侦听器没有触发(在模拟器中)。

findDecorationIV().addScrollListener(new ScrollListener() {

            @Override
            public void scrollChanged(int scrollX, int scrollY, int oldscrollX, int oldscrollY) {
                System.out.println("There has been some scrolling"); // never triggered

            }
        });

findDecorationIV().addFocusListener(new FocusListener() {

            @Override
            public void focusLost(Component cmp) {
                System.out.println("Focused lost!"); // never triggered

            }

            @Override
            public void focusGained(Component cmp) {
                System.out.println("On focus!"); // triggered only once

            }
        });

现在在阅读CN1 doc 时,我倾向于认为我应该在自己的DecorationModel 类中实现ListModel,因为有一个名为getSelectedIndex 的方法。不幸的是,我无法理解这是如何工作的,以及为什么在他们的示例中它们总是在 getSelectedIndex 方法中返回 0。

因此,我真的陷入困境并寻求帮助,以便能够并获得向用户显示的当前可见装饰。

非常感谢任何可以提供帮助的人!

问候

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    最终在做了其他事情之后,我尝试了一些比我之前尝试过的更简单的方法。实际上,我在加载装饰模型后向 ImageList 添加了一个侦听器(在本例中为 SelectionListener):

    findDecorationIV().getImageList().addSelectionListener(new SelectionListener() {
    
                    @Override
                    public void selectionChanged(int oldSelected, int newSelected) {
                        System.out.println("On vient de sélectionner la décoration suivante " + newSelected);
    
                    }
                });
    

    所以问题解决了!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 2011-09-10
    • 2018-02-02
    • 2014-12-22
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多