2012-03-29 70 views
-1

因此,我们正在尝试实施3个文本编辑区,让用户在我们的黑莓应用程序中输入他们的用户凭据。然而,当用户的名字比editfield框长时,我们遇到了麻烦(该字段必须位于一个框内,并且该框必须保持静止,文本必须水平滚动。)如何实现适当的Horizo​​ntal Scrollable Custom EditField?

这是我的自定义滚动条编辑字段类based on the scrollable edit field here

import net.rim.device.api.ui.Manager; 
import net.rim.device.api.ui.component.EditField; 
import net.rim.device.api.ui.container.HorizontalFieldManager; 

public class ScrollableEditField extends Manager { 
private final static int  DEFAULT_TOP_PADDING  = 1; 
private final static int  DEFAULT_BOTTOM_PADDING = 1; 
private final static int  DEFAULT_LEFT_PADDING = 1; 
private final static int  DEFAULT_RIGHT_PADDING = 1; 

private int      TOTAL_VERTICAL_PADDING = DEFAULT_TOP_PADDING + DEFAULT_BOTTOM_PADDING; 
private int      TOTAL_HORIZONTAL_PADDDING = DEFAULT_LEFT_PADDING + DEFAULT_RIGHT_PADDING; 

private int      width = -1; 
private int      height = -1; 

private HorizontalFieldManager hfm = new HorizontalFieldManager(HORIZONTAL_SCROLL); 
private EditField    ef; 

public ScrollableEditField(String label, String initialValue, int maxNumChars, long innerEditFieldStyle) { 
    super(NO_HORIZONTAL_SCROLL); 
    ef = new EditField(label, initialValue, maxNumChars, innerEditFieldStyle); 
    hfm.add(ef); 
    add(hfm); 
} 

protected void sublayout(int width, int height) { 
    if (this.width != -1) { 
     width = this.width; 
    } 

    if (this.height != -1) { 
     height = this.height; 
    } else { 
     height = ef.getFont().getHeight(); 
    } 

    layoutChild(hfm, width-TOTAL_HORIZONTAL_PADDDING, height-TOTAL_VERTICAL_PADDING); 
    setPositionChild(hfm, DEFAULT_LEFT_PADDING, DEFAULT_TOP_PADDING); 
    setExtent(width, height); // Maybe not.. 
}  

public EditField getEditField() { 
    return ef; 
} 

public void setWidth(int width) { 
    this.width = width; 
} 
public void setHeight(int height) { 
    this.height = height; 
} 
protected void onFocus(int direction) { 
    super.onFocus(direction); 
    ef.setCursorPosition(0); 
} 

protected void onUnfocus() { 
    hfm.setHorizontalScroll(0); 
    super.onUnfocus(); 
} 
}; 

这是我在我的代码使用这个类:

我把这些场为HorizontalFieldManager,然后将一个网格单元内这个HFM(具有固定尺寸)。下面是几行字:

GridFieldManager gfm = new GridFieldManager(1, 2, 0); 
gfm.setColumnProperty(0, GridFieldManager.FIXED_SIZE, Display.getWidth()* 1/5); 
gfm.setColumnProperty(1, GridFieldManager.PREFERRED_SIZE_WITH_MAXIMUM, Display.getWidth()* 4/5); 

HorizontalFieldManager hfm1e = new HorizontalFieldManager(USE_ALL_WIDTH|USE_ALL_HEIGHT); 

ScrollableEditField sef1 = new ScrollableEditField("", "", 32, EditField.FILTER_EMAIL); 
sef1.setWidth((Display.getWidth()* 4/5)-5); 
sef1.setHeight(getFont().getHeight()); 
sef1.setBorder(BorderFactory.createRoundedBorder(new XYEdges(1,1,1,1))); 
hfm1e.add(sef1); 
gfm2.add(hfm1e); 

那些最后几行只是在这里和那里采取从一个更大的类,但他们说明我想自定义编辑字段添加到GUI的方式。

现在由于某种原因,当我运行这段代码的时候,这个字段就在那里,我可以输入它,但是它就好像字段是一个字符宽,我看不到右边的任何东西,边界。任何人都可以帮助发现我做错了什么?

+0

香蕉人!!! 。 – tipycalFlow 2012-03-30 08:39:35

+1

我想你使用的是我在这里发布的'ScrollableEditField',http://stackoverflow.com/a/9524509/396949。如果您觉得它有用,请考虑提升它。 – mrvincenzo 2012-03-30 08:40:18

回答

0

试试这个代码(我已经删除了一些冗余代码)

GridFieldManager gfm = new GridFieldManager(1, 2, 0); 
gfm.setColumnProperty(0, GridFieldManager.FIXED_SIZE, Display.getWidth()* 1/5); 
gfm.setColumnProperty(1, GridFieldManager.PREFERRED_SIZE_WITH_MAXIMUM, Display.getWidth()* 4/5); 

ScrollableEditField sef1 = new ScrollableEditField("", "", 32, EditField.FILTER_EMAIL); 
sef1.setBorder(BorderFactory.createRoundedBorder(new XYEdges(1,1,1,1))); 
gfm2.add(sef1); 

sef1的大小由其经理,gfm确定。因此,hfm1e,sef1.setWidth()sef2.setWindth()是多余的。

相关问题