java - Eclipse SWT - Java 编程困境

标签 java eclipse swt

我正在编写一个 Eclipse 插件,它打开一个文件并显示该文件中包含的所有图像。该图像显示是 GUI 应用程序的一部分。每个图像都是通过将其与 SWT Canvas 小部件关联来呈现的。当我打开文件时,我拥有确定必须显示的图像数量所需的所有信息。我认为逐个创建所有 Canvas 对象并将每个 Canvas 对象存储在某种类型的数组(如数据结构)中是有意义的。我打开的每个文件都有不同数量的要显示的图像。我决定使用 ArrayList。

我按如下方式进行操作:为每个图像创建一个 Canvas 对象,并将所有 Canvas 对象存储在 ArrayList 中。问题是:每个 Canvas 对象都有一个与其关联的 PaintListenerMouseListener - 用于调整大小和检测图像是否已被“单击”。我在“for 循环”中创建所有 Canvas 对象 - 其中包括为每个 Canvas 对象分配一个 PaintListenerMouseListener ,如下所示:

`

//
// Assume the following ArrayLists have been defined:
// myCanvases, myImages, and myFrames
//

for (int i = 0; i < numberOfImages; i++) {

    canvas = new Canvas(getMyComposite(), SWT.BORDER | 
        SWT.NO_MERGE_PAINTS | SWT.NONE );

    canvas.setLayoutData(getMyGridData());

.
    .
    .

    canvas.addPaintListener(new PaintListener() {
    public void paintControl(final PaintEvent event) {
        if (myImages.get(i) != null) {
                myImages.get(i).dispose();
                event.gc.drawImage(mySceneImages.get(element), 0, 0);
    }
    }
});

    currentCanvas.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseUp(MouseEvent event) {
        getVideo().setCurrentFrame(myFrames.get(i).getFrameNumber());
                }
    });

    canvas.setVisible(true);

        myCanvases.add(i, canvas);


} // End for (int i = 0; i < numberOfScenes; i++)

`

问题:变量“i”用于确定要访问 PaintListenerMouseListener 中不同 ArrayList 中的哪个元素。请注意,我在这里使用“i”是为了说明目的。我意识到“for 循环”中定义的变量“i”不能在监听器的内部类中使用。无论如何......当监听器接收到事件时,无论我使用什么变量来尝试访问 ArrayList 的特定元素都包含它的当前值,而不是定义监听器时的值。

如何在 Java 中解决这个问题?我真正需要的是每个监听器定义中的代码,本质上等于:

`

myCanvases.get(7); // or whatever the for loop iteration is for that specific object);

// Not

myCanvases.get(i); // - which will contain the present value of i;

`

当监听器执行时。

任何想法将不胜感激。

谢谢。

最佳答案

您只需将该对象添加到 PaintListener 的构造函数中即可。

例如

class MyPaintListener implements PaintListener
{
 Image image;
 MyPaintListener(Image image)
 { 
    this.image = image;
 }
 void paintControl(...)
 {  
     do stuff with image.
 }
}

关于java - Eclipse SWT - Java 编程困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773868/

相关文章:

java - Spring 安全上下文是否在 REST/SOAP 调用中持续存在?

java - Maven 版本的 pom.xml 文件中出现错误,显示以下错误 ""

android - 使用内容提供者游标

java - 如何限制用户在 SWT 文本字段中输入特殊字符

java - 为什么 Spring Boot 要求我定义 'entityManagerFactory' bean?

java - 将对象转换为类类型

java - Dropbox 找不到资源 trusted-certs.jks

java - 从 Azure AD Java 获取访问 token

带有 SWT 的 JavaApplicationStub 导致问题

java - 是否可以将FormLayout 放入GridLayout 中?