首页 文章

Codename One:从ImageViewer中包含的DefaultListModel获取当前可见图像索引

提问于
浏览
1

我正在构建一个应用程序,它利用LayeredLayout将2个ImageViewers显示在彼此之上 . 较深的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 .

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

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

问候

1 回答

  • 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);
    
                    }
                });
    

    所以问题解决了!

相关问题