调整自动填充字段黑莓的大小

时间:2012-05-27 06:12:49

标签: java blackberry java-me autocomplete blackberry-jde

我想降低自动填充字段的高度。如何去做?

继承我的代码

HorizontalFieldManager hfm = new HorizontalFieldManager();
LabelField lbl = new LabelField(" Name:                 ");

final AutoCompleteField TextField1 = new AutoCompleteField(filterLst)
{
    public int getPreferredWidth() 
    {
        return Display.getWidth()/2;
    }

    public void sublayout(int maxWidth, int maxheight)
    {
        super.sublayout(getPreferredWidth(), getPreferredHeight());
        setExtent(getPreferredWidth(), getPreferredHeight());
    }
};
hfm.add(lbl);
hfm.add(TextField1);
add(hfm); 

下图是它的外观。我希望它看起来与我用于其他标签的编辑区域大小相同。

这是我的editfield代码

   //Add box next to field for containing input 
   HorizontalFieldManager hfm1 = new HorizontalFieldManager();
   LabelField lbl1 = new LabelField(" Amount:              ");

   final EditField TextField2 = new EditField()
   {
      boolean _drawFocus = false;
      protected void layout(int maxWidth, int maxHeight) 
      {
         super.layout(Math.min(maxWidth, 300), Math.min(maxHeight, 30));
      }
      protected boolean keyChar(char ch, int status, int time) 
      {
         if (CharacterUtilities.isDigit(ch) || (ch == Characters.BACKSPACE)) 
         {
            return super.keyChar(ch, status, time);
         }
         return true;
      }
      protected void drawFocus(Graphics graphics,boolean on) 
      {
         _drawFocus = on;
         super.drawFocus(graphics, on);
         _drawFocus = false;
      }    
      protected void paint(Graphics g)
      {       
         if ( _drawFocus ) 
         {
            super.paint(g);
            return;
         } 
         g.clear();
         g.drawRect(0,0, 50, 50);
         int oldColor = g.getColor();
         g.setColor(Color.WHITE);
         g.fillRect(0, 0, this.getPreferredWidth(), this.getPreferredHeight());
         g.setColor(oldColor);
         g.drawRect(100, 100, 50, 50);
         super.paint(g);
      }
   };
   TextField2.setBorder(BorderFactory.createRoundedBorder(new XYEdges(6,6,6,6)));
   hfm1.add(lbl1);
   hfm1.add(TextField2);
   add(hfm1);

enter image description here

我想将autocompletefield的大小用于其他字段的名称。请帮助。

由于

1 个答案:

答案 0 :(得分:1)

可能导致您遇到麻烦的一件事是EditField是人们通常认为的Field。但是,AutoCompleteField的处理方式更像是Manager。当然,它希望成为Manager,因为它(可能)包含EditField,但之后还会包含另一个动态显示自动填充选项的子Field

(非经理)FieldManager子类处理布局略有不同,所以我发现尝试使用普通getPreferredHeight()layout()以及{ {1}}对我来说效果不佳。

所以,我所做的是双重的:

  1. 首先,我尝试使用您的sublayout()子类模仿默认AutoCompleteField的装饰。这不完美。如果您希望它们看起来完全相同,则可能需要为两者编写自定义EditField方法。你说问题只是想调整字段的大小,所以我觉得这很好。
  2. 其次,由于paint()似乎包含一个子EditField(至少在逻辑上......我不确定它是否以这种方式实现),我决定尝试让EditField选择自己的大小,以与正常EditFields匹配的方式。为此,我通过在每个字段上设置相同的AutoCompleteField来控制所有字段的高度。
  3. 我对您的代码所做的更改:

    Font

    我删除了编辑字段中试图控制高度的 final int fontSize = 24; // pick whatever you like here final int pad = 2; final int margin = 2; 方法中的代码,因为......正如我所说,我没有成功设置自动完成字段的高度。我刚刚将您的编辑字段的layout()更改为非常标准的实现:

    layout()

    然后,我在编辑字段上设置了填充,因为它看起来像 final EditField TextField2 = new EditField() { boolean _drawFocus = false; protected void layout(int maxWidth, int maxHeight) { super.layout(getPreferredWidth(), getPreferredHeight()); } 使用2像素的填充(在5.0 Storm2上)。您可能不关心,对于此UI,但它似乎也有2像素的边距。

    AutoCompleteField

    然后,我为您的所有字段设置相同的字体。它不必是默认字体。只是让他们都一样。这一步似乎决定了 TextField2.setPadding(pad, pad, pad, pad); TextField2.setMargin(margin, margin, margin, margin); ...设置字体所绘制的圆角矩形字段的可见大小。

    AutoCompleteField

    之后,编辑字段和自动填充字段应该是一致的高度。我在5.0 9550上对此进行了测试。由于垫和边距值是通过实验确定的,我完全可以相信这些值(例如2个像素)可能会在不同的设备上发生变化。你可能需要进行一些实验。