在LWUIT元素上绘制自定义元素(使用J2ME本机图形)的最佳方法是什么?

custom元素是来自映射库的实现,将其内容(例如Google map)绘制到Graphics对象。 如何将结果直接绘制在LWUIT元素上(目前,我正在尝试将其绘制在Component上)。

在LWUIT包中编写包装的唯一方法是公开其内部实现吗?

编辑:

约翰:您的解决方案看起来像很多工程设计:P我最终使用的是以下包装器:

package com.sun.lwuit;

public class ImageWrapper {
  private final Image image;

  public ImageWrapper(final Image lwuitBuffer) {
    this.image = lwuitBuffer;
  }

  public javax.microedition.lcdui.Graphics getGraphics() {
    return image.getGraphics().getGraphics();
  }
}

现在,我可以从LWUIT获取'native'Graphics元素。 在其上绘画-有效地在LWUIT图像上绘画。 而且我可以使用图像在组件上绘画。

而且它仍然看起来像一个hack :)

但是真正的问题是即使混淆后代码开销也高达50kB。 但这是另一个帖子的问题:)

/ JaanusSiim

===============>>#1 票数:2

我认为没有必要进行任何黑客攻击。 您可以继承LWTUI Component类的子类,然后可以对组件的图形上下文进行任何操作。 您不会获得本机的lcdui.Graphics对象,而是具有易于使用的具有相同接口的对象。

如果您确实需要将lcdui.Graphics传递给某个基础库以显示其输出,则建议这样做:

组件代码中的某个位置(仅在确实需要更改组件内容时执行):

private Image buffer = null; // keep this

int[] bufferArray = new int[desiredWidth * desiredHeight];
javax.microedition.lcdui.Image bufferImage = 
    Image.createEmptyImage(desiredWidth, desiredHeight);
thirPartyComponent.paint(bufferImage.getGraphics());
bufferImage.getRGB(bufferArray,0,1,0,0,desiredWidth, desiredHeight);
bufferImage = null; //no longer needed
buffer = Image.createImage(bufferArray, desiredWidth, desiredHeight);

在组件paint(g)方法中:

g.drawImage(0,0, buffer);

通过执行hack,您失去了可移植性,并且还暗示您要暴露实现私有对象,因此您可能还会破坏其他东西。

希望这可以帮助。

===============>>#2 票数:0

基于LWUIT和J2ME的javadoc,并猜测自定义J2ME类是Canvas ,看起来您将必须:

  • 包裹自定义J2ME组件的LWUIT的Component类的
  • 重写LWUIT组件的paint()方法
  • 类化包装LWUIT Graphics类的J2ME Graphics类 ,并将所有方法调用传递给
  • 将包装的J2ME Graphics实现传递给自定义J2ME组件的paint方法

第三步很丑。 检查LWUIT邮件列表 ,看看以前是否有人有圆顶。 从已发布的API中,我看不到另一种方法。

编辑:在问题中添加的hack看起来比我对Image的hack更好。 对于一般情况,我所拥有的可能会更好,但是我对LWUIT或J2ME的了解还不够,无法真正说出这一点。

  ask by JaanusSiim translate from so

未解决问题?本站智能推荐:

1回复

lcdui vs lwuit命令的区别

我习惯于使用lcdui界面,但我想使用lwuit界面。 谁能告诉我不同​​的命令列表。
1回复

在LWuiT组件上绘制动画和图像

我在理解如何在容器中绘制多个图像以及如何在组件上绘制动画时遇到问题。 首先,我想在组件背景上绘制两个图像。 这是代码: 公共类CountryInteriorContainer扩展了Component { } 我在这里创建绘画队列。 但是在容器上绘制时只有一个第一张图像。
1回复

如何在LWUIT的HTML组件中将背景设置为透明?

当我在LWUIT 1.5中使用HTMLComponent时,背景似乎默认为白色。 如何使其透明,或至少填充整个屏幕的背景色? 我尝试了以下方法: 以上所有内容都将被忽略。 我也尝试过在体内涂上一种颜色: 但是,这只会将背景色置于文本后面,而不能将整个屏幕的高度都填满
1回复

如何在LWUIT中使用addComponent更新组件?

我试图在下面的代码片段中更新现有组件,其中“ index ”是现有组件的索引。 从上面开始,最后添加了新组件,而不是更新到该索引组件。 我们如何才能更新现有组件?
1回复

如何滚动表单以使指定的组件在LWUIT中可见?

在向表单添加组件时,我希望表单向下滚动以使该新添加的组件可见。 我假设.scrollComponentToVisible()使用了.scrollComponentToVisible() ,但我不为我工作。 如果运行下面提供的示例代码,您会注意到该组件已正确添加并获得了焦点。 但是,
1回复

J2ME LWUIT TabbedPane:如何在选项卡中添加多个组件?

如何在单个 Tab中添加多个组件(例如Label , Textfield和Button )? 我尝试创建具有多个组件的新Form,然后将该表单作为新Tab添加到TabbedPane中,但引发了一个异常: java/lang/IllegalArgumentException: A form
1回复

LWUIT Gui建造者

我安装了JDK 7,并尝试运行LWUIT资源编辑器,但是它没有GUI构建器选项卡,并且Web起始版本完全无法正常工作,这是否意味着我必须使用JDK的较旧版本
2回复

LWUIT Painter:如何在图像标签上绘制线条?

我有一个像这样创建的图像标签。 我想在它上面绘制一些线条。 我尝试过像上面的代码一样使用画家,但我无法成功地做到这一点。 我怎么做错了怎么办? 编辑: 线条的绘制是成功的,但问题是线条是在labelImage后面绘制的。 我该如何制作以便在前面绘制线条?
1回复

lwuit视频组件浮在命令上方

我的LWUIT视频组件悬停在我的命令上方。 知道我该如何解决吗? 我的代码如下。
1回复

Lwuit Java中html组件中的滚动条

我想在lwuit使用textarea和textbox创建聊天窗口。 Textarea必须能够显示笑脸和彩色文字。 我已经使用了HtmlComponent的HtmlComponent并在滚动条中遇到了问题。 随着文本内容大小的增加,包括文本框在内的整个屏幕滚动。 我只希望滚动textare