无法更改Blackberry中TextField的宽度

时间:2013-07-02 20:17:18

标签: blackberry blackberry-jde blackberry-eclipse-plugin

我是Blackberry的新手,我只是尝试在Blackberry中使用一些示例应用程序。我试图创建一个登录页面。在那里,当我试图改变文本字段的宽度时,文本字段变得不可见。

以下是创建TextField的代码的一部分。

super(Field.FIELD_VCENTER);
......
t_username = new TextField()
{
    public void layout(int width, int height)
    {
        super.layout(500, 30);
        setExtent(500, 30);
    }
};
t_username.setMaxSize(10);
t_username.setBorder(BorderFactory.createSimpleBorder(new XYEdges(1,1,1,1),Border.STYLE_SOLID));

我试图创建一个边框来检查它的来源,但找不到它。 PFB,快照:

enter image description here

1 个答案:

答案 0 :(得分:3)

覆盖TextField#layout()方法

public void layout(int width, int height)
{
    super.layout(500, 30);
    setExtent(500, 30);
}

一种方式,您可以设置文本字段的宽度。所以,我认为这里还有其他问题。

1)当您更改代码时,您错误地删除了对

的调用
add(t_username);

您没有告诉我们您实际添加该字段的位置,因此如果您未在其他地方调用add(t_username),则不会显示该字段。必须将字段添加到ManagerScreen才能显示。

2)也许您编写的其他代码(但未显示)正在尝试使用Graphics对象执行某些操作。例如,如果您在另一个字段中覆盖paint(Graphics)方法,则可能正在更改颜色(例如graphics.setColor(Color.WHITE))并且不记得重置原始颜色。可能,您的文本字段在那里,但它与背景颜色相同。但是,如果发生这种情况,当您给该字段焦点时,您仍然可以看到文本字段光标。我无法从你的截图中看出来。

更好的方式

通常(但并非总是如此),管理器/屏幕应负责确定其大小。我认为大多数字段设置自己的宽度是不好的封装(尽管有例外)。我建议使用setMargin()USE_ALL_WIDTH标记为此文本字段设置合理的宽度:

public class TextFieldScreen extends MainScreen {

   private TextField t_username;

   public TextFieldScreen() {
      super(Field.FIELD_VCENTER);

      HorizontalFieldManager row = new HorizontalFieldManager();
      LabelField label = new LabelField("Username");
      label.setMargin(new XYEdges(2, 0, 2, 10));
      row.add(label);

      t_username = new TextField(TextField.USE_ALL_WIDTH);
      t_username.setMaxSize(10);
      t_username.setBorder(BorderFactory.createSimpleBorder(new XYEdges(1,1,1,1), Border.STYLE_SOLID));
      t_username.setMargin(new XYEdges(2, 10, 2, 10));
      row.add(t_username);

      add(row);
   }
}

与硬编码500的宽度相比,此解决方案的一个好处是,如果您的应用支持纵向/横向旋转,则上面的代码将在屏幕宽度更改时正确调整字段宽度。如果您对字段宽度进行硬编码,则当设备旋转为纵向时,该字段将太宽。