Java 在GWT中动态添加画布
我目前正在开发一个图像编辑器应用程序。 我试图在我的应用程序中提供一个选项来处理不同的层,比如GIMP或Photoshop。我的方法是为用户添加的每个层添加一个Java 在GWT中动态添加画布,java,gwt,canvas,Java,Gwt,Canvas,我目前正在开发一个图像编辑器应用程序。 我试图在我的应用程序中提供一个选项来处理不同的层,比如GIMP或Photoshop。我的方法是为用户添加的每个层添加一个Canvas。 一切都很好,但不知怎么的,我动态添加的画布没有出现 在我的类构造函数中,我添加了1个通用画布,其中包含一个背景图像,无法编辑。这个画布(是全局的)确实显示并正常工作。所有可编辑的图层都存储在画布图层列表中 这是应该向我的列表和表单面板添加画布的方法 public void addCanvasLayer(String lay
Canvas
。
一切都很好,但不知怎么的,我动态添加的画布没有出现
在我的类构造函数中,我添加了1个通用画布,其中包含一个背景图像,无法编辑。这个画布(是全局的)确实显示并正常工作。所有可编辑的图层都存储在画布图层列表中
这是应该向我的列表
和表单面板
添加画布的方法
public void addCanvasLayer(String layerName, int id){
Canvas newCanvas = Canvas.createIfSupported();
newCanvas.setWidth(this.scaledImageWidth + "px");
newCanvas.setHeight(this.scaledImageHeight + "px");
newCanvas.setCoordinateSpaceWidth(this.scaledImageWidth);
newCanvas.setCoordinateSpaceHeight(this.scaledImageHeight);
newCanvas.getElement().setId(layerName);
newCanvas.getElement().getStyle().setZIndex(id);
this.fpCanvas.add(newCanvas, new AbsoluteData(0, 0));
this.canvasLayers.add(newCanvas);
this.addCanvasHandler(newCanvas);
context = newCanvas.getContext2d();
}
它所做的一切就是创建画布,将其大小设置为主宽度和高度,设置其id和z索引,将画布添加到我的画布列表,将处理程序添加到画布(clickhandler,onMouseDownHandler,…),并将画布添加到主上下文。
添加画布时,ScaledImageWidth和-Height绝对不为null或0
有什么想法吗
编辑:通过添加fpCanvas.layout()解决了问题;直到方法的末尾。
我的formpanel刚刚需要刷新以下是我如何管理画布层: 公共抽象类层 扩展复合 { } 加上:
public void addLayer( Layer layer, int zindex )
{
// m_main is a LayoutPanel
int width = m_main.getOffsetWidth();
int height = m_main.getOffsetHeight();
m_layers.add( layer );
layer.setZ( zindex );
if ( m_main.getWidgetCount() > 0 )
{
m_main.insert( layer, 1 );
}
else
{
m_main.add( layer );
}
layer.setPixelSize( width, height );
(...)
通过添加fpCanvas.layout()解决了此问题;直到方法的末尾。我的formpanel刚刚需要刷新,谢谢你的快速回复!我不太可能放弃当前处理层的方式,因此我将尝试找出不同之处:不是处理画布本身,而是使用一个包含画布+一些更改属性的功能的层类。所以它只是外包给了另一个班级。我的:创建临时画布并将其添加到我的全局列表中可能有问题吗?我看到的唯一区别是我的画布与它们所连接的小部件大小相同。如果您有firefox,请打开web Developer tools(Ctrl+Shift+I),然后打开3D视图。旋转页面,检查是否可以看到所有画布层彼此重叠。当我这样做的时候,我可以在下降几层之后选择任何一层,最后我得到的结果是:
。也许你的画布尺寸有问题。我还在寻找解决办法。。。这是我的状态:我的全局画布已附加到我的formpanel。但不知何故,所有由addCanvasLayer(String layerName,int id)创建的画布都不会显示在formpanel上,尽管我使用的代码与我的方法中创建全局画布的代码完全相同。是否不可能创建本地画布,将其添加到全局列表并使用它??在调试和监视我的formpanel时,所有画布都被附加,但我的本地画布元素数据为空。
public void addLayer( Layer layer, int zindex )
{
// m_main is a LayoutPanel
int width = m_main.getOffsetWidth();
int height = m_main.getOffsetHeight();
m_layers.add( layer );
layer.setZ( zindex );
if ( m_main.getWidgetCount() > 0 )
{
m_main.insert( layer, 1 );
}
else
{
m_main.add( layer );
}
layer.setPixelSize( width, height );
(...)