Невозможно изменить ширину TextField в Blackberry

Я новичок в Blackberry, я просто пробовал несколько примеров приложений в Blackberry. Я попытался создать страницу входа. В том, что когда я пытался изменить ширину текстового поля, текстовое поле становилось невидимым.

Ниже приведена часть кода для создания TextField.

super(Field.FIELD_VCENTER);
......
t_username = new TextField()
{
    public void layout(int width, int height)
    {
        super.layout(500, 30);
        setExtent(500, 30);
    }
};
t_username.setMaxSize(10);
t_username.setBorder(BorderFactory.createSimpleBorder(new XYEdges(1,1,1,1),Border.STYLE_SOLID));

Я попытался создать границу, чтобы проверить, куда она идет или нет, но не смог ее найти. ПФБ, снимок:

введите здесь описание изображения


person Jonathon Gohan    schedule 02.07.2013    source источник
comment
Нейт ответил правильно. Я подозреваю, что это жестко закодированные 500. Поля редактирования всегда пытаются использовать всю ширину экрана. Ширина 500 пикселей на меньшем экране, очевидно, будет упущена.   -  person Kevin    schedule 03.07.2013
comment
Спасибо Turdnugget за ответ. С помощью Нейта я смог контролировать ширину TextBox.   -  person Jonathon Gohan    schedule 03.07.2013
comment
Turdnugget, но я пробовал и с меньшими значениями, но безуспешно. Спасибо.   -  person Jonathon Gohan    schedule 03.07.2013


Ответы (1)


Переопределение метода TextField#layout()

public void layout(int width, int height)
{
    super.layout(500, 30);
    setExtent(500, 30);
}

один способ задать ширину текстового поля. Так что, я думаю, здесь что-то еще не так.

1) Возможно, когда вы изменили свой код, вы по ошибке удалили вызов

add(t_username);

вы не показываете нам, где вы на самом деле добавляете это поле, поэтому, если вы не вызываете add(t_username) где-то еще, оно не будет видно. Поля должны быть добавлены к Manager или Screen, чтобы быть видимыми.

2) Возможно, какой-то другой код, который вы написали (но не показали), пытается что-то сделать с Графический объект. Например, если вы переопределяете метод paint(Graphics) в другом поле, вы можете изменить цвет (например, graphics.setColor(Color.WHITE)) и не забыть сбросить исходный цвет. Возможно, ваше текстовое поле есть, но оно того же цвета, что и его фон. Однако, если бы это происходило, вы все равно могли бы видеть курсор текстового поля, когда вы наделяли это поле фокусом. Я просто не могу сказать по вашему скриншоту.

Лучший способ

Обычно (но не всегда) определение размера поля должно быть обязанностью менеджера/экрана, содержащего поле. Я думаю, что это плохая инкапсуляция, когда большинство полей устанавливают свою ширину (хотя есть исключения). Я бы рекомендовал использовать setMargin() и флаг USE_ALL_WIDTH, чтобы установить разумную ширину для этого текстового поля:

public class TextFieldScreen extends MainScreen {

   private TextField t_username;

   public TextFieldScreen() {
      super(Field.FIELD_VCENTER);

      HorizontalFieldManager row = new HorizontalFieldManager();
      LabelField label = new LabelField("Username");
      label.setMargin(new XYEdges(2, 0, 2, 10));
      row.add(label);

      t_username = new TextField(TextField.USE_ALL_WIDTH);
      t_username.setMaxSize(10);
      t_username.setBorder(BorderFactory.createSimpleBorder(new XYEdges(1,1,1,1), Border.STYLE_SOLID));
      t_username.setMargin(new XYEdges(2, 10, 2, 10));
      row.add(t_username);

      add(row);
   }
}

Одним из преимуществ этого решения по сравнению с жестко заданной шириной 500 является то, что если ваше приложение поддерживает вращение в книжной/альбомной ориентации, приведенный выше код будет корректно регулировать ширину поля при изменении ширины экрана. Если вы жестко запрограммируете ширину поля, поле будет слишком широким, когда устройство повернется в книжную ориентацию.

person Nate    schedule 03.07.2013
comment
Привет, Нейт. Спасибо за быструю помощь. Это было очень полезно. Спасибо. Большое спасибо. Я смог контролировать ширину. Кроме того, Нейт, переопределив getPreferredHeight() и getPrefereedWidth(), мы можем установить ширину и высоту TextBox. Я также попробовал этот вариант, но не смог установить ни высоту, ни ширину. Если мы можем сделать, пожалуйста, предоставьте мне образец кода. Заранее спасибо. - person Jonathon Gohan; 03.07.2013
comment
@JonathonGohan, это еще один метод изменения размера поля. Но, это действительно другой вопрос. Не могли бы вы опубликовать здесь новый вопрос о переполнении стека и объяснить, что вы пытаетесь сделать? Спасибо. - person Nate; 03.07.2013