2013-03-27 215 views
1

首先,我想强调的是,我在谈论J2ME(javax.microedition.lcdui.TextField)中的TextField而不是AWT中的TextField(java.awt.TextField)。在J2ME中更改TextField的宽度和字体?

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

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

+0

无法更改高级UI元素的外观可确保所有LCDUI应用在同一设备上看起来相同。由制造商决定高级元素应该是什么样子。所以如果你不喜欢它的外观,那就责怪制造商。 但是之前许多人对此并不满意,所以大量的LCDUI可供选择,LWUIT已经成为最受欢迎的之一。你想要LWUIT。 – 2013-03-28 06:49:32

+0

也许,我没有其他选择,我想到了一些控制这个,但不是LCDUI中的TextField。谢谢。 – 2013-03-28 10:45:44

回答

3

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

如果这些不能完成,我不认为程序员可以使他们的J2ME应用程序看起来最好。

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

这在lcdui package API docs很好解释,在MIDP UI API的部分结构:

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

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

换句话说,使用高层次的API时,假定底层的实现会做必要的适应设备的硬件和原生UI风格。

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


为你寻找功能更全面的访问,研究API的“低水平”的一部分,在包的文档描述上面提到:

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

尤其Graphics类有方法来获取和设置字体 - 分别称为,getFontsetFont

请注意,图形提供的功能可以使用CustomItem API“嵌入”窗体内。

+0

谢谢,你的解释很清楚。我还有一个问题,如果我使用低级API,我怎么知道它支持哪些设备? (我猜LWUIT是低级的,不是吗?)。 – 2013-03-28 10:43:49

+0

@KingKing低级别的API在高级别的设备上受到支持 - 您只需编写代码以确保您绘制的内容与设备屏幕大小相匹配(高级API可为您提供这一功能,但代价是灵活性不够)。正如fo [tag:lwuit],它是第三方库,UI工具包。为了您的目的,它看起来值得考虑。如果您对详细信息感兴趣,请查看[lwuit tag wiki](http://stackoverflow.com/tags/lwuit/info)和此标签中的问题 – gnat 2013-03-28 11:04:02

+0

当您说“低级API在相同设备上受支持为高第一级“是否意味着无论使用什么API(低级别或高级别),我的J2ME应用程序都将在MIDP支持的设备上运行正常,但如果设备的功能有限,使用低级API将使我的J2ME应用程序看起来不同于我在设计时看到了什么?从你的回答中引用的这条线是什么意思?“因为低级API提供了访问特定设备的特定细节的方法......”。据我了解,这表明少MIDP设备支持低层API比高层API。谢谢! – 2013-03-28 12:26:24

4

如果您想在J2ME中自定义组件TextField,我强烈建议您使用LWUIT(轻量级用户界面工具包)。您可以通过LWUIT为Java手机创建良好的用户界面,并根据需要对其进行自定义。正如名字所说,这真的很轻巧。

自定义文本字段中LWUIT简单的代码如下:

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文件并在代码中使用它。

+0

我认为这是我想要的。谢谢。 – 2013-03-28 10:44:25

+0

@KingKing如果它对您有帮助,请单击“打勾”符号并将其作为答案接受为答案。 – 2013-03-28 10:59:25

+0

对不起,但我只能接受1个答案:(我希望你同意我的决定,让我们看看gnat的努力,他试图向我解释许多重要的事情,而不仅仅是一种解决方法,我真的很感激。也赞成你们两位,谢谢... – 2013-03-30 08:58:36