1

首先我要强调的是,我说的是 J2ME 中的 TextField (javax.microedition.lcdui.TextField),而不是 AWT (java.awt.TextField) 中的 TextField。

你能告诉我这在 J2ME 中是否可行?我想更改 TextField 的字体(字体系列、字体大小、字体颜色),我还想更改它在表单上呈现的宽度。我尝试使用 setMaxSize() 但这也限制了 TextField 可以包含的字符数。我想要的是在不限制字符数的情况下更改 TextField 的宽度。

如果这些都做不到,我不认为程序员可以让他们的 J2ME 应用程序看起来最好。或者至少他们会有另一个支持这些功能的控件。

4

2 回答 2

4

如果你想自定义 J2ME 中的 TextField 等组件,我强烈建议你使用LWUIT (Light Weight User Interface Toolkit)。您可以通过 LWUIT 为 Java 手机创建良好的 UI,并根据需要自定义它们。顾名思义,它真的很轻。

在 LWUIT 中自定义 TextField 的简单代码如下:

TextField myTextField = new TextField();
myTextField.getStyle().setPadding(9,9,9,9); // Top , Left , Bottom , Right padding
myTextField.getStyle().setMargin(7,7,7,7);  // Top , Left , Bottom , Right padding
myTextField.getStyle().setFont(*use the font whatever you wish*);

注意:请参阅 .RES 文件和资源编辑器,这对更改应用程序的外观和感觉很有帮助。您可以将字体导入 .RES 文件并在代码中使用它。

于 2013-03-28T05:12:16.197 回答
2

您不能在 Java ME 中更改 TextField 的宽度和字体,此类的API Javadocs与字体没有任何关系(实际上,这些文档中没有提到字体这个词)。

如果这些都做不到,我不认为程序员可以让他们的 J2ME 应用程序看起来最好。

你是对的,但这个限制的原因是 TextField 和其他高级 UI API 旨在允许程序员编写简单的高度可移植的代码(将在大/小屏幕上使用什么字体的细节留给系统)。

这在lcdui 包 API 文档中得到了很好的解释,在MIDP UI API 的结构部分:

高级 API 专为客户端部分在 MID 上运行的业务应用程序而设计。对于这些应用程序,跨设备的可移植性很重要。为了实现这种可移植性,高级 API 采用了高级抽象,并且对外观和感觉的控制非常少。这种抽象进一步体现在以下方面:

  • 实际绘制到 MID 的显示是由实现执行的。应用程序不定义组件的视觉外观(例如,形状、颜色、字体等)。
  • 导航、滚动和其他原始交互由实现封装,应用程序不知道这些交互。
  • 应用程序无法访问具体的输入设备,例如特定的单个键。

换句话说,在使用高层 API 时,假设底层实现会对设备的硬件和原生 UI 风格做必要的适配……

关于字体,高级 UI API 类的选择实现,例如ListChoiceGroup具有一些功能,但这些功能非常有限,如果您有兴趣,请查阅 API 文档以获取详细信息。


为了更全面地访问您要查找的功能,请研究 API 的“低级”部分,如上面提到的包文档中所述:

此 API 专为需要精确放置和控制图形元素以及访问低级输入事件的应用程序而设计。一些应用程序还需要访问特殊的、特定于设备的功能... 编写到低级 API 的应用程序不能保证是可移植的,因为低级 API 提供了访问特定设备特定细节的方法...

特别是,Graphics类具有获取和设置字体的方法 - 分别被调用,getFont并且setFont.

请注意,Graphics 提供的功能可以使用CustomItem API “嵌入”到 Form 中。

于 2013-03-27T22:16:26.353 回答