在J2ME中更改TextField的宽度和字体?

时间:2013-03-27 21:24:04

标签: java-me textfield midp lcdui

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

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

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

2 个答案:

答案 0 :(得分:4)

如果您想在J2ME中自定义TextField等组件,我强烈建议您使用LWUIT(轻量级用户界面工具包)。您可以通过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文件并在代码中使用它。

答案 1 :(得分:3)

您无法在Java ME中更改TextField的宽度和字体,API Javadocs此类与字体无关(实际上,这些文档中未提及字体)。

  

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

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

lcdui package API docs中,在 MIDP UI API的结构部分中已经很好地解释了这一点:

  

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

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

换句话说,在使用高级API时,假设底层实现将对设备的硬件和本机UI样式进行必要的调整......

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


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

  

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

特别是,Graphics类有获取和设置字体的方法 - 分别调用getFontsetFont

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