2011-03-18 24 views
0

下面的類是一個文本框字段。這可以修改,以便當文本框填充文本和用戶保持鍵入文本然後滾動?現在發生的事情是,一旦文本框被填充文本,任何後續輸入的文本都不會被顯示。自定義編輯字段不顯示所有鍵入的文本

感謝

import net.rim.device.api.ui.Color; 
import net.rim.device.api.ui.Font; 
import net.rim.device.api.ui.Graphics; 
import net.rim.device.api.ui.component.EditField; 

public class CustomEditField extends EditField { 
    // private members of the CustomEditField class 
    private Font defaultFont; 
    // used to get the default font 
    private String text; 

    // used to specify the default width of the table cells 

    // constructor calls the super class constructor 
    public CustomEditField(String label, String initialValue, int maxNumChars, 
      long style) { 
     super(label, initialValue, maxNumChars, style); 
    } 

    // overrides the default getPreferredWidth functionality to return a fixed 
    // width 
    public int getPreferredWidth() { 
     defaultFont = Font.getDefault(); 
     text = "0000000000"; 
     return defaultFont.getAdvance(text); 

    } 

    // overrides the default layout functionality to set the width of the table 
    // cell 
    protected void layout(int width, int height) { 
     width = getPreferredWidth(); 
     height = super.getPreferredHeight(); 
     super.layout(width, height); 
     // uses the super class' layout functionality 
     // after the width and the height are set 
     super.setExtent(width, height); 
     // uses the super class' setExtent functionality 
     // after the width and the height are set 
    } 

    public void paint(Graphics graphics){ 

     graphics.setBackgroundColor(Color.LIGHTBLUE); 
     super.paint(graphics); 
    } 

} 
+0

我不說這是不可能的,但是我相信,有沒有簡單的方法,因爲你將需要覆蓋'油漆(圖形圖像)'行爲一起選擇與跟蹤領域內的插入位置。我還隱約想起有人通過在啓用滾動的情況下在'Horizo​​ntalFieldManager'內包裝'EditField'實現了這一點,但是該解決方案也有點臭。我的建議 - 如果可以的話避免這種情況。 – 2011-03-20 00:04:27

+0

只是一個想法(未測試) - 可能使用嵌入式瀏覽器字段將允許得到你想要的? – 2011-03-20 00:06:51

+0

對我而言,這似乎很奇怪,因爲用戶在文本框中鍵入的文本多於文本框的容量是標準行爲,所以這並未實現。 – 2011-03-31 16:09:09

回答

1

這將幫助你上手。這是我正在使用的ScrollableEditField的簡化版本。我在黑莓設備可用之前編碼它,因此需要一些額外的工作來支持TouchEvent

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); 
    }  

    public EditField getEditField() { 
     return ef; 
    } 

    public void setWidth(int width) { 
     this.width = width; 
    } 

    protected void onFocus(int direction) { 
     super.onFocus(direction); 
     ef.setCursorPosition(0); 
    } 

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

public class ScrollableEditFieldScreen extends MainScreen { 
    public ScrollableEditFieldScreen() { 
     super(NO_VERTICAL_SCROLL); 
     setTitle("ScrollableEditField"); 

     // hfm1 and hfm2 are here just to position the ScrollableEditField in the center of the screen 
     HorizontalFieldManager hfm1 = new HorizontalFieldManager(USE_ALL_HEIGHT | FIELD_HCENTER); 
     HorizontalFieldManager hfm2 = new HorizontalFieldManager(FIELD_VCENTER); 

     // instantiating the scrollable edit field and adding border 
     ScrollableEditField sef = new ScrollableEditField("", "", 50, 0); 
     sef.setBorder(BorderFactory.createRoundedBorder(new XYEdges(5,5,5,5))); 
     sef.setWidth(sef.getFont().getAdvance('0')*10); 

     hfm2.add(sef); 
     hfm1.add(hfm2); 
     add(hfm1); 
    } 
} 
相關問題