JTable ou JLists com componentes diversos

Olá pessoal,

Quero fazer uma JTable ou uma JList onde sejam exibidos componentes diversos, por exemplo, uma JTable com uma coluna apenas de botões ou uma JList do mesmo tipo.

Tentei fazer isso para a JTabel através do setCellEditor() com um JComboBox, mas o que acontece é que o ComboBox só fica visível quando a edição da célula começa. Como quero colocar um componente de visualização, preciso que ele fique visível o tempo todo.

Imagino que isto deva ser feito através do método setCellRenderer() para a coluna que quero personalizar, mas esse método precisa de um CellRenderer como parâmetro e não sei como fazer um CellRenderer para exibir componentes. Preciso da ajuda de vocês nesse ponto.

Para um JList você deve criar uma lista default com os modelos
escolhidos, onde cada modelo recebe um objeto.

[code]
//
// Cria a lista de elementos para o JList.
//
DefaultListModel
modelo = new DefaultListModel();

//
// Adiciona os elementos na lista.
//
modelo.addElement(“Teste”);[/code]

Depois adicione a sua JList o seu modelo.

// // Adicionando... // io_lt_lista.setModel(modelo);

Já em uma tabela,
para colocar um checkbox por exemplo, basta declarar o tipo da coluna como “boolean”…
agora, se precisa de um JButton, ou radio… é mais complicado…
sugiro que crie uma classe extendendo ao JTable e nela crie seus métodos proprios…
você pode fazer isso com o JList…
eu fiz isso a muito tempo atras… precisei colocar um JCombobox, ou JTextField não lembro…
fiz assim:

public void setComboBox ( int an_coluna, JComboBox ao_cb_combobox ) { // // Pega o nome da coluna pelo inteiro recebido por argumento e executa o // o mesmo método agora passando o nome da coluna como argumento... // setComboBox(getColumnName(an_coluna),ao_cb_combobox); }

Neste caso, an_coluna seria acoluna na tabela a ser inserido o campo ComboBox e
o ao_cb_combobox é o combo que será mostrado na coluna quando a coluna receber o foco.
claro que está classe foi extendida a JTable.

Tchauzin!

Olá Lina,

Entendi mais ou menos o que você explicou sobre o JList, mas quanto ao JTable, voei completamente.

Você poderia me explicar de outra forma?

Oi,
bom dia…
posso tentar explicar de outra maneira sim =)

então, o que estou tentando dizer é o seguinte:

[b]* Crie uma classe chamada por exemplo: TesteTable

  • Extenda sua classe TesteTable com a JTable… (public class TesteTable extends JTable)

  • Agora em sua classe crie os métodos que precisar, e sobreescreva algum que já existe em
    uma JTable.[/b]

Tipo: quando você extends uma classe, você possou a ter todos os padrões dela, concorda?
logo, se você quiser um botão ou qualquer outro componente em sua tabela, crie um método
na sua classe, e quando for utilizar e criar sua tabela, no lugar de usar o JTable utilize
a sua classe TesteTable.

Assim como no exemplo em código que dei acima, você poderia fazer io_table (que é uma variavel
TesteTable) … io_table.setComboBox();

Ai, não sei se cnsegui explicar, mais é meio complicadinho mesmo… desculpa

Tchauzin!

[quote=brothermclaud]Olá pessoal,

Quero fazer uma JTable ou uma JList onde sejam exibidos componentes diversos, por exemplo, uma JTable com uma coluna apenas de botões ou uma JList do mesmo tipo.

Tentei fazer isso para a JTabel através do setCellEditor() com um JComboBox, mas o que acontece é que o ComboBox só fica visível quando a edição da célula começa. Como quero colocar um componente de visualização, preciso que ele fique visível o tempo todo.

Imagino que isto deva ser feito através do método setCellRenderer() para a coluna que quero personalizar, mas esse método precisa de um CellRenderer como parâmetro e não sei como fazer um CellRenderer para exibir componentes. Preciso da ajuda de vocês nesse ponto.[/quote]

Cara… voce esta quase lá…

O editor fica visível quando começa a edição e quando ela termina quem exibe o componente é o renderer.

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#editrender

Da uma olhada… parece complicado inicialmente mas é bem simples… Se você não entender la posta aki denovo!

Na verdade, basta criar uma classe que implemente TableCellRenderer e no método getTableCellRendererComponent retornar o componente que será exibido.

Depois você associa essa classe a sua tabela. Você pode usar para isso os métodos setDefaultCellRenderer() da JTable, associando esse renderer a uma classe, que deverá ser retornada no método getColumnClass() do seu model.