代号一:从 ImageViewer 中包含的 DefaultListModel 获取当前可见图像索引
Codename One : Get the current visible image index from a DefaultListModel included in an ImageViewer
我正在构建一个应用程序,它利用 LayeredLayout 在彼此之上显示 2 个 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 class 中实现 ListModel,因为有一个名为 getSelectedIndex 的方法。不幸的是,我不明白这是如何工作的,以及为什么在他们的例子中他们总是在 getSelectedIndex 方法中 return 0。
因此,我真的很困惑,正在寻求帮助,以便能够并获得向用户显示的当前可见装饰。
非常感谢任何可能提供帮助的人!
此致
最终在做了其他事情之后,我尝试了一些比我以前尝试过的更简单的方法。事实上,我在加载装饰模型后向 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);
}
});
所以问题解决了!
我正在构建一个应用程序,它利用 LayeredLayout 在彼此之上显示 2 个 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 class 中实现 ListModel,因为有一个名为 getSelectedIndex 的方法。不幸的是,我不明白这是如何工作的,以及为什么在他们的例子中他们总是在 getSelectedIndex 方法中 return 0。
因此,我真的很困惑,正在寻求帮助,以便能够并获得向用户显示的当前可见装饰。
非常感谢任何可能提供帮助的人!
此致
最终在做了其他事情之后,我尝试了一些比我以前尝试过的更简单的方法。事实上,我在加载装饰模型后向 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);
}
});
所以问题解决了!