2011-04-14 21 views
0

我有一個行編輯字段可以接受的文字長於編輯字段的寬度(像一個「正常」的Windows文本框)的要求。如何防止Horizo​​ntalFieldManager中的單向滾動?

由於BasicEditField控制正常字包裝的內容,我已經把我的BasicEditField一個Horizo​​ntalFieldManager允許水平滾動內部實現這一要求。

該作品在一個感覺:如果我鍵入文本不是在編輯欄的寬度越長,HFM自動滾動到這使光標移動到右側可見左(以編輯字段與它)。

的問題是,用戶可以向右滑動到左,完全移動BasicEditField關閉屏幕左側。我希望只能在BasicEditField的內容太寬而無法完整顯示時才能向左滾動,並且只允許向左滾動以使光標保持在右側。

回答

1

我實現我自己的EditField中當打這個確切的情況。發生什麼事情是因爲你允許水平滾動,並且EditField本質上想要使用盡可能多的寬度,你最終得到一個非常寬的EditField。我從我的代碼複製這個,所以希望它能爲你工作,但如果它不添加評論,我會嘗試看看我能否幫助它工作。

EditField edit = new EditField(EditField.NO_NEWLINE | style) { 

     protected void fieldChangeNotify(int context) { 
      try{ 
       super.fieldChangeNotify(context); 
       setExtent(this.getFont().getAdvance(this.getText()) + 10, this.getHeight()); 
      } 
      catch(Exception e){ 
       //don't recall why I needed this, but it works so I'm hesitant to remove it 
      } 

     } 
     protected void layout(int width, int height) { 
      super.layout(width, height); 
      setExtent(this.getFont().getAdvance(this.getText()) + 10, this.getHeight()); 
     } 
    }; 

這將做的是逐步使EditField隨着文本的增長而變得更寬。我有一個與它一起成長的HFM,但你可能不需要這個。我這樣做是因爲如果字段變得比屏幕寬度更寬,而不是滾動整個屏幕,則可以讓這個字段水平滾動。另外,+ 10在那裏,因爲它沒有它剪裁光標。如果你想這樣做,我可以編輯這個帖子來包含它。

+0

謝謝。自發布此問題以來,我的方向稍有不同。我現在連接到HFM的scrollChanged事件中,測量編輯框中文本的寬度,並使用'setHorizo​​ntalScroll'將滾動限制到恰好顯示光標的位置。當用戶將光標移動到左側時,我仍然需要繼續,因爲它現在正在消失。 – MusiGenesis 2011-04-14 16:50:17

+0

順便說一句,這代碼似乎完全容納光標,它通常是一個空間的寬度:'this.getFont()getAdvance(this.getText()+「「)'。 – MusiGenesis 2011-04-14 16:51:40

相關問題