如何将此事件方法从 C# 转换为 java?

How to convert this event method from C# to java?

我在 C# 中有这个 class 实现接口 IPhoto:

class BorderPhoto : Form, IPhoto
    {
        IPhoto pho;
        Color color;    
        public BorderPhoto(IPhoto p, Color c)
        {
            pho = p;
            color = c;
            this.Paint += new PaintEventHandler(Drawer);
        }    
        public void Drawer(object sender, PaintEventArgs e)
        {
            pho.Drawer(sender, e);
            e.Graphics.DrawRectangle(new Pen(color, 10), 25, 15, 215, 225);
        }
    }

这是 C# 中的接口:

namespace GivenWihInterface
{
    interface IPhoto
    {
        void Drawer(object sender, PaintEventArgs e);
    }
}

我想在 java 中转换此代码,这是 java 版本 class 我有:

package GivenWihInterface;
import java.awt.Color;
public class BorderPhoto {
    IPhoto pho;
    Color color;

    public BorderPhoto(IPhoto p, Color c)
    {
        pho = p;
        color = c;
        //this.Paint += new PaintEventHandler(Drawer); 
        // How to pass the delegate PaintEventHandler hire
    }

    public void Drawer(/*How to pass parameters*/)
    {
        //pho.Drawer(sender, e); 
        // How to implement paint event

        //e.Graphics.DrawRectangle(new Pen(color, 10), 25, 15, 215, 225); 
        // How to implement paint event
    }

}

这是界面:

package GivenWihInterface;
public interface IPhoto {
    public void Drawer(/*How to pass parameters*/);    
}

我在分配委托和声明对象和事件参数时遇到问题,不确定将什么事件作为参数传递,以及如何在 java 中将其分配为委托。有人可以帮我解决这个问题吗?

编辑:

我尝试使用 Tangible Software Solutions Converter 但没有成功,我仍然遇到同样的问题:

public class BorderPhoto{

    IPhoto pho;
    Color color;

    public BorderPhoto(IPhoto p, Color c)
    {
        pho = p;
        color = c;
        this.addPaintEventhandler(new IPhoto(){
            public void Drawer(object sender, ...other parameters...){
                // put your code here
            }
        }); 
    }

    public void addPaintEventHandler(Iphoto pho){
        this.pho = pho;
    }

    public void onDraw(this, ...other parameters...){
        pho.Drawer(this, ...other parameters...);
    }
}

属性 named pho 持有一个处理程序对象,即它将处理绘制,因此将一个对象传递给它 to/can 处理绘制,在您的代码中,它是一个 IPhoto 类型的对象,因此将一个 IPhoto 对象传递给它。

这里我们将对象作为匿名对象传递,即不是事先创建对象然后传递它,而是在需要它的地方创建对象,也没有显式扩展界面。

一旦处理程序对象附加到 属性,您只需调用对象的 Drawer(),对象就会开始绘图。

将界面中提到的任何必需参数传递给它。很可能它需要一个发件人对象,这里是 BorderPhoto 对象。如果要在绘制时调用 BorderPhoto 对象的某些方法,则需要此对象,例如要在其上绘制的 canvas,它由 BorderPhoto 持有。