Поле метки BlackBerry по вертикали с настраиваемой высотой

#java #blackberry #labelfield

#java #ежевика #поле надписи

Вопрос:

У меня есть LabelField, вложенное в строку TableLayoutManager. Я хочу, чтобы строка имела определенную высоту (ту же высоту, что и ее растровый фон). Чтобы добиться этого, я изменил метод layout() вложенного LabelField:

 LabelField lblHours = new LabelField(hours,
            Color.BLACK, Manager.FIELD_VCENTER) {
        protected void layout(int width, int height) {
            super.layout(width, 40 //height of the bitmap);
            setExtent(width, 40 //height of the bitmap);
        }
    };
  

Это успешно увеличило размер строки TableLayoutManager. Однако, как только я это сделаю, поле метки больше не центрируется вертикально внутри строки. Есть предложения о том, как это сделать?

Спасибо!

Комментарии:

1. Я думаю, вам нужно предоставить больше кода — как вы добавляете LabelField в TableLayoutManager?

2. Привет, Майкл, у меня есть оператор switch, который, по сути, проходит по дням недели (1-7), и для каждого случая он создаст экземпляр моего пользовательского класса, который расширяет TableLayoutManager, и добавит его к текущему родительскому элементу VerticalFieldManager. Это то, что вы ищете? Дайте мне знать, я, безусловно, могу предоставить конкретный код…

Ответ №1:

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

 LabelField importanceLabel = new LabelField("Importance: ",LabelField.FIELD_VCENTER | LabelField.FIELD_RIGHT) {
          public void paint(Graphics g) { 
              g.setColor(0x145085); 
              super.paint(g); 
          } 
          protected void layout(int width, int height) {
              super.layout(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
              setExtent(Math.min(width, this.getFont().getAdvance(this.getText())), 26); //height of the bitmap);
          }
      };
  

Это будет тот же ответ .. и спасибо вам, ребята.. для обсуждения. Это помогло мне.

Ответ №2:

Попробуйте изменить setExtent(width, 40) на setExtent(this.getWidth(), 40) . Это может не сработать, если getWidth () пытается занять всю доступную ширину (что и делает ваш вызов setExtent ()), и поскольку текст будет отрисован выровненным по левому краю, похоже, что ваше поле не центрировано, но на самом деле оно просто занимает всю ячейку вашей таблицы. В качестве альтернативы, если это не сработает, вы можете сделать setExtent(Math.min(width, this.getFont().getAdvance(this.getText())), 40);

Комментарии:

1. Привет, jprofitt, спасибо за вашу помощь. К сожалению, оба предложенных вами решения дают тот же результат, что и раньше…

2. Было ли поле метки центрировано до внесения изменений? У меня сложилось впечатление, что это было.

3. Да, поле метки было центрировано по вертикали, прежде чем я установил для него пользовательскую высоту.

4. Возможно, вместо переопределения layout() попробуйте изменить getPreferredHeight() на возврат 40 и позволить ему выполнять обычную компоновку

5. Я пробовал это, и, как ни странно, это вообще не увеличивает высоту строки.