开发者

Add gui components from bottom up instead of top down

Is it possible to add gui components to blackberry screen b开发者_JS百科eginning from the bottom instead of the top ?

Thanks


A quick response would be no but let me explain why and suggest afew work arounds;

Screens don't actually handle the laying out of fields onto themselves, to do this they delcare a delegate manager which can be any type of manager, vertical, horizontal etc. The problem is all managers begin painting themselves from the top left. For a manager to paint fields starting from the bottom it would have to know exaclty where the bottom is located and add components up rather than down which goes against all the low level code inside the manager class. You can read more on managers in the BlackBerry API documentation.

You could still achieve an effect similar to this though by tweaking how you add fields and playing with field styles. For example consider this code:

  add(new LabelField("field 1"));
  add(new LabelField("field 2"));

This would give us the results;

 field 1
 field 2

because field 1 is drawn then field 2 below it. However if we were always to insert fields at the begining of our manager e.g. position 0 like so:

   insert(new LabelField("field 1", FIELD_BOTTOM), 0);
   insert(new LabelField("field 2", FIELD_BOTTOM), 0);

We would get the results;

field 2
field 1

Which is the results you'd expect from a screen described in your question.

I'm not really sure how you'd get the fields to paint to the bottom of a screen though, you could try researching the "position relative bottom" styles but I'm honestly unsure.


You are probably using a VerticalFieldManager, and the documentation on that says:

A vertical field manager lays out fields top to bottom in a single column.

So if you

manager.add(field1); 
manager.add(field2); 
manager.add(field3);

The order of the fields on the screen will be just that. But you could do something like this:

Vector v = new Vector();
v.add(field1);
v.add(field2);
v.add(field3);
for(int i=v.size()-1;i>=0;i--) {
   manager.add((Field)v.elementAt(i));
}


Sort of. You can use the Manager#insert(Field, int) method and always insert at the zero index. If you do this with a VerticalFieldManager, it would simulate a bottom-up adding of Fields to the Manager.


Some of the answers so far are to use Manager.insert(Field, int), and keep inserting at position 0. This will work, but the running time of the insert is linear in the number of elements already added to the manager. Meaning this solution will have an overall quadratic running time. Not a big deal if you're adding under 10 fields, but if you're planning on adding more than that, the insert overhead will be substantial.

If you can do the inserts top to bottom, by reordering the fields as Muger's solution suggests, the running time will be much improved.

Finally, you can write your own BottomUpVerticalFieldManager that does the layout the way you want. When you write your own manager, you can layout the fields in whatever way pleases you. In this case, it would be bottom to top. Writing your own manager may seem daunting, but it will give you considerable freedom in the future when trying to solve layout issues.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜