Как нарисовать горизонтальную линию в ЮЖНОЙ позиции BorderLayout контейнера?

#java-me #lwuit

#java-me #lwuit

Вопрос:

У меня есть контейнер, макет которого является BorderLayout. Я хочу нарисовать горизонтальную линию в ЮЖНОЙ позиции, потому что этот контейнер рисуется неоднократно, поэтому я хочу разделить каждый из них горизонтальной линией.

Вот код:

 tList = new List(tModel);
tList.setListCellRenderer(new CTable(listclient));

public class CTable extends Container implements ListCellRenderer {

  private Label pic = new Label("");
  private Container cnt;
  private Label name = new Label("");
  private Label credit = new Label("");
  private ligneHorizontal ligne;

  private Font fontLibelle = (MenuPrincipalForm.r).getFont("FontTextFieldBold");

  private Label focus = new Label("");

  public CTable(Vector valeur)
  {
      setLayout(new BorderLayout());
      addComponent(BorderLayout.WEST, pic);
      cnt = new Container(new BoxLayout(BoxLayout.Y_AXIS));
      name.getStyle().setBgTransparency(0);
      name.getStyle().setFont(fontLibelle);
      credit.getStyle().setBgTransparency(0);
      cnt.addComponent(name);
      cnt.addComponent(credit);
      ligne = new ligneHorizontal(100);
      cnt.addComponent(ligne);
      addComponent(BorderLayout.CENTER, cnt);
      focus.getStyle().setBgTransparency(100);
  }

  public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected)
  {
      if ("-".equalsIgnoreCase(String.valueOf(value)))
      {
          name.setText(" - ");
          credit.setText("Encours : -  Impayés : -");
          pic.setIcon(null);
      }
      else
      {
          if (index%2 == 0)
              this.setUIID("evenRowsCell");
          else
              this.setUIID("oddRowsCell");
          name.setText("123456789012 - Rasolofomanana Marc");
          credit.setText("Crédits : 15.000 (Ar) Impayés : 10.000 (Ar)");
          pic.setIcon(null);
      }
      return this;
  }
  public Component getListFocusComponent(List list)
  {
      return focus;
  }
}

public class ligneHorizontal extends Label {
    public ligneHorizontal(int l)
    {
        String t = "";
        do
        {
            t.concat(new String("-"));
        }
        while(t.length()<l);
        this.setText(t);
        this.setPreferredH(5);
        this.getStyle().setBgColor(0);
    }
}
  

А также я хочу знать, как раскрасить четные и нечетные строки списка, потому что я пытался, но цвет не получается, пока я не нажму на ячейку.

Ответ №1:

Хорошо, я нашел решение: я вывел BackgroundPainter where в public void paint(Graphics g,Rectangle rect) методе, который я рисую line ( g.drawLine(rect.getX(), rect.getY() h-1, rect.getX() w, rect.getY() h-1); ) . Поэтому, когда я хочу нарисовать линию в контейнере, я пишу myContainer.getStyle().setBgPainter(new derivedClassName(myContainer));

Ответ №2:

добавить Label с предпочтительной высотой 5, с черным цветом bg между контейнерами

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

1. Это не сработает, потому что метки имеют особый случай для меток с пустыми строками, присваивая им значение предпочтительного размера 0 и не рисуя их. Предпочтительная ширина также должна быть увеличена, что может заставить ее работать, хотя это не отличное решение. Обычно мы используем повторяющиеся изображения в теме (например, ознакомьтесь с пользовательским интерфейсом для диалогового окна добавления в демо-версии T-zone Friends.

2. @Shai Almog Можете ли вы указать URL-адрес сайта?

3. я согласен с Шаем, но раньше я использовал текст метки " " (один пробел)