如何将此事件方法从 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 持有。
我在 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 持有。