LWUIT para apresentar formato de tabela

Olá, estou desenvolvendo um projeto em JME e preciso apresentar na tela uma tabela.
O problema é que sou nova nisso e só encontrei exemplos muito complicados em Canvas.
Decidi tentar com o LWUIT, usando GridLayout, só que quando eu apresento na tela as colunas ficam todas do mesmo tamanho e algumas palavras aparecem cortadas.
Alguém teria alguma solução para esse problema, é realmente com o GridLayout que eu tenho que trabalhar, ou teria algum outro jeito?
Desde já muito obrigada!

Att,
Jéssica

Jéssica,

O scroll do form está setado como true?

form.setScrollable(true);

Olá kozak.
Não esta…o que o setScrollable faz?

Opa…
Ele habilita a rolagem de tela do Form, não sei se é o caso, mas talvez seu texto seja maior que a area disponível no form, por isto ele trunca para poder caber na tela. É uma suposição.

Humm…
Coloquei e ele “liberou” espaço para a palavra toda, porém aumentou a largura de todas as colunas, tem como definir separadamente a largura de cada coluna?

Qual componente você está adicionando no GridLayout ?
Pode posta o pedaço do código onde você cria o componente e adiciona no GridLayout ?

Um exemplo que vi, é adicionado um List ao GridLayout, onde o list possui a propriedade setSize(Dimension)

Segue meu código…

[code]TextArea posicao = new TextArea("", 1, 2);
posicao.setEditable(false);
Label pos = new Label(“1”);

        TextArea times = new TextArea("Times", 2, 2);
        times.setEditable(false);
        Label tim = new Label("São Paulo");

        TextArea pontosGanhos = new TextArea(" PG", 2, 2);
        pontosGanhos.setEditable(false);
        Label pontos = new Label("30");

        TextArea jogos = new TextArea(" Jogos", 2, 2);
        jogos.setEditable(false);
        Label jog = new Label("30");

        GridLayout exampleLayout = new GridLayout(1, 4);
        
        
        Container container = new Container(new BoxLayout(BoxLayout.Y_AXIS));
        container.setLayout(exampleLayout);
        container.setVisible(true);
        container.setScrollable(true);

        
        container.addComponent(posicao);
        container.addComponent(times);
        container.addComponent(pontosGanhos);
        container.addComponent(jogos);
        container.addComponent(pos);
        container.addComponent(tim);
        container.addComponent(pontos);
        container.addComponent(jog);


        
        formTabela = new Form("Tabela");
        formTabela.show();
        formTabela.setScrollable(true);
        formTabela.addComponent(container);[/code]

Quando vc diz para eu usar um list, seria um list para cada coluna?

Agora vendo seu código acho que a idéia do list te dê muito trabalho.
Eu não estou muito certo disto, pois não tenho como testar daqui, mas dá uma olhada neste comando:

So para esclarecer a idéia do list que vi segue um codigo de exemplo:
cada “linha” do List corresponde a um Contato com as infomãções: String name, String email, Image pic… o resultado fica bem legal na tela:

import com.sun.lwuit.Command;
import com.sun.lwuit.Component;
import com.sun.lwuit.Container;
import com.sun.lwuit.Form;
import com.sun.lwuit.Image;
import com.sun.lwuit.Label;
import com.sun.lwuit.List;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.BorderLayout;
import com.sun.lwuit.layouts.BoxLayout;
import com.sun.lwuit.list.DefaultListCellRenderer;
import com.sun.lwuit.list.ListCellRenderer;
import com.sun.lwuit.util.Resources;
import java.io.IOException;

/**
 *
 * @author cf130546
 */
public class ScrollDemo extends Demo {
    private int orientation;
    
    private String[][] CONTACTS_INFO = {
    {"Nir V.","Nir.Vazana@Sun.COM"},
    {"Tidhar G.","Tidhar.Gilor@Sun.COM"},
    {"Iddo A.","Iddo.Arie@Sun.COM"},
    {"Ari S.","Ari.Shapiro@Sun.COM"},
    {"Chen F.","Chen.Fishbein@Sun.COM"},
    {"Yoav B.","Yoav.Barel@Sun.COM"},
    {"Moshe S.","Moshe.Sambol@Sun.COM"},
    {"Keren S.","Keren.Strul@Sun.COM"},
    {"Amit H.","Amit.Harel@Sun.COM"},
    {"Arkady N.","Arcadi.Novosiolok@Sun.COM"},
    {"Shai A.","Shai.Almog@Sun.COM"},
    {"Elina K.","Elina.Kleyman@Sun.COM"},
    {"Yaniv V.","Yaniv.Vakrat@Sun.COM"},
    {"Nadav B.","Nadav.Benedek@Sun.COM"},
    {"Martin L.","Martin.Lichtbrun@Sun.COM"},
    {"Tamir S.","Tamir.Shabat@Sun.COM"},
    {"Nir S.","Nir.Shabi@Sun.COM"},
    {"Eran K.","Eran.Katz@Sun.COM"}
    };
    
    public String getName() {
        return "Scrolling";
    }

    protected void execute(final Form f) { 
        f.setLayout(new BorderLayout());
        //disable the scroll on the Form.
        f.setScrollable(false);
        Image contacts = null;
        Image  persons[] = null;
       
        //some constants to help us parse the people image
        int contactWidth= 36;
        int contactHeight= 48;
        int cols = 4;
 
        try {
            Resources images = UIDemoMIDlet.getResource("images");
            contacts = images.getImage("people.jpg");
            persons = new Image[CONTACTS_INFO.length];
            for(int i = 0; i < persons.length ; i++){
                    persons[i] = contacts.subImage((i%cols)*contactWidth, (i/cols)*contactHeight, contactWidth, contactHeight, true);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        final Contact[] contactArray = new Contact[5 * persons.length];
        for (int i = 0; i < contactArray.length; i++) {
            int pos = i % CONTACTS_INFO.length;
            contactArray[i] = new Contact(CONTACTS_INFO[pos][0], CONTACTS_INFO[pos][1], persons[pos]);
        }
        f.addComponent(BorderLayout.CENTER, createList(contactArray, List.VERTICAL, new ContactsRenderer()));
        f.addCommand(new Command("Horizontal") {
            public void actionPerformed(ActionEvent ev) {
                if(orientation == List.VERTICAL) {
                    f.removeAll();
                    f.addComponent(BorderLayout.NORTH, createList(contactArray, List.HORIZONTAL, new ImageRenderer()));        
                    f.revalidate();
                }
            }
        });
        f.addCommand(new Command("Vertical") {
            public void actionPerformed(ActionEvent ev) {
                if(orientation == List.HORIZONTAL) {
                    f.removeAll();
                    f.addComponent(BorderLayout.CENTER, createList(contactArray, List.VERTICAL, new ContactsRenderer()));        
                    f.revalidate();
                }
            }
        });
    }

    private List createList(Contact[] contacts, int orientation, ListCellRenderer renderer) {
    	
        List list = new List(contacts);
        this.orientation = orientation;
        list.getStyle().setBgTransparency(0);
        list.setListCellRenderer(renderer);
        list.setOrientation(orientation);
        list.setPaintFocusBehindList(true);
        return list;
    }
    
    class ImageRenderer extends DefaultListCellRenderer {
        private Label focus = new Label("");
        public ImageRenderer() {
            super(false);
        }
        public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {
            super.getListCellRendererComponent(list, "", index, isSelected);
            setIcon(((Contact) value).getPic());
            return this;
        }
        public Component getListFocusComponent(List list) {
            return focus;
        }
    }

    class ContactsRenderer extends Container implements ListCellRenderer {

        private Label name = new Label("");
        private Label email = new Label("");
        private Label pic = new Label("");

        private Label focus = new Label("");
        
        public ContactsRenderer() {
            setLayout(new BorderLayout());
            addComponent(BorderLayout.WEST, pic);
            Container cnt = new Container(new BoxLayout(BoxLayout.Y_AXIS));
            name.getStyle().setBgTransparency(0);
            email.getStyle().setBgTransparency(0);
            pic.getStyle().setBgTransparency(0);
            cnt.addComponent(name);
            cnt.addComponent(email);
            addComponent(BorderLayout.CENTER, cnt);
            focus.setFocus(true);
            
        }

        public Component getListCellRendererComponent(List list, Object value, int index, boolean isSelected) {

            Contact person = (Contact) value;
            name.setText(person.getName());
            email.setText(person.getEmail());
            pic.setIcon(person.getPic());
            return this;
        }

        public Component getListFocusComponent(List list) {
            return focus;
        }
    }

    class Contact {

        private String name;
        private String email;
        private Image pic;

        public Contact(String name, String email, Image pic) {
            this.name = name;
            this.email = email;
            this.pic = pic;
        }

        public String getName() {
            return name;
        }

        public String getEmail() {
            return email;
        }

        public Image getPic() {
            return pic;
        }
    }
}

O resultado fica mais ou menos parecido com isto:

Aqui http://lwuit.blogspot.com/2009/09/new-components-in-lwuit.html tem outro exemplo de tabelas com WLUIT usando DefaultTableModel

Espero que te ajude.

Tentei aplicar o container.setSize(new Dimension(20, 20)) porém ele não faz alteração nenhuma :S
Vou dar uma estudada nesse modelo que vc passou.
Muito obrigada pela ajuda!

Att,
Jéssica

Oi Jessica,

Ja tentou criar uma classe derivada do TextArea e sobrescrever o calcPreferredSize() para retornar o tamanho que vc quer?