【问题标题】:Unable to change width of TextField in Blackberry无法在 Blackberry 中更改 TextField 的宽度
【发布时间】:2013-07-02 20:17:18
【问题描述】:

我是 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,快照:

【问题讨论】:

  • 内特的回答是正确的。我怀疑它是硬编码的 500。编辑字段总是尝试使用全屏宽度。小屏幕上的 500 像素宽度显然会消失。
  • 感谢 Turdugget 的回复。在 Nate 的帮助下,我能够控制 TextBox 的宽度。
  • Turdugget,但我也尝试使用较小的值,但没有成功。谢谢。

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


【解决方案1】:

覆盖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))并且不记得重置原始颜色。可能您的文本字段在那里,但它与背景颜色相同。但是,如果发生这种情况,当您给该字段 focus 时,您仍然可以看到文本字段光标。从你的截图我根本看不出来。

更好的方法

通常(但并非总是如此),应该由包含该字段的管理器/屏幕来确定其大小。我认为让大多数字段设置自己的宽度是不好的封装(尽管有例外)。我建议使用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 的宽度相比,此解决方案的一个好处是,如果您的应用支持纵向/横向旋转,上面的代码将随着屏幕宽度的变化正确调整字段宽度。如果对字段宽度进行硬编码,当设备旋转为纵向时,字段会过宽。

【讨论】:

  • 嗨内特,感谢您的快速帮助。那非常有用。谢谢你。太感谢了。我能够控制宽度。 Nate 也可以通过重写 getPreferredHeight() 和 getPrefereedWidth() 来设置 TextBox 的宽度和高度。我也试过这个选项,但不能同时设置高度和宽度。如果可以的话,请给我一个示例代码。提前致谢。
  • @JonathonGohan,这是改变字段大小的另一种技术。但是,这确实是一个不同的问题。您能否在此处发布关于堆栈溢出的 问题,并解释您要做什么?谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2019-08-16
  • 2017-09-13
  • 1970-01-01
相关资源
最近更新 更多