Gostaria de perguntar se alguém sabe alguma forma de fazer com um texto grande caixa em uma célula de jtable, tipo… não aumentando a largura da coluna, fazendo que nem acontece no word ou no excel. Ex. ao invés de :
| textotextotextotextotextotextotextotextotexto…| -> Texto grande que não cabe na célula
isto:
| textotextotextotextotextotextotextotextotexto | -> Texto grande que cabe na célula
textotextotexto
Mais ou menos que nem se fosse um jtextarea ou numa tabela no html.
Pelo que imagino, o carinha quer que se o texto for muito grande, ele ou invada a célula seguinte, como no Excel, ou então que haja uma quebra de linha (no caso do Excel você precisa formatar a célula para que ele quebre as linhas.
Ambas essas coisas não estão prontas no JTable, que não tem nem 1% dos recursos do Excel.
(O grande problema do JTable é que todo mundo acha que dá para fazer qualquer coisa que o Excel faz com um JTable )
[quote=entanglement]Pelo que imagino, o carinha quer que se o texto for muito grande, ele ou invada a célula seguinte, como no Excel, ou então que haja uma quebra de linha (no caso do Excel você precisa formatar a célula para que ele quebre as linhas.
Ambas essas coisas não estão prontas no JTable, que não tem nem 1% dos recursos do Excel.
(O grande problema do JTable é que todo mundo acha que dá para fazer qualquer coisa que o Excel faz com um JTable )
[/quote]
É realmente o que eu queria era fazer que nem se faz no excel, quando a gente configura a uma célula para ajustar o tamanho do texto para caber em uma célula. Como vocês disseram o JTable não é o excel, é muito mais divertido, dando uma “googleada” consegui o seguinte código, se alguém também precisar, que resolveu o meu problema:
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;
public class TabelaTextAreaRenderer extends JTextArea implements TableCellRenderer{
// This method is called each time a cell in a column
// using this renderer needs to be rendered.
public TabelaTextAreaRenderer(){
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
// 'value' is value contained in the cell located at
// (rowIndex, vColIndex)
if (isSelected) {
// cell (and perhaps other cells) are selected
}
if (hasFocus) {
// this cell is the anchor and the table has the focus
}
// Configure the component with the specified value
setText(value.toString());
// Set tool tip if desired
setToolTipText((String)value);
// Since the renderer is a component, return itself
return this;
}
}
Este código transforma uma célula de um JTable em uma TextArea ou qualquer outro componente que quizer.
É realmente o que eu queria era fazer que nem se faz no excel, quando a gente configura a uma célula para ajustar o tamanho do texto para caber em uma célula. Como vocês disseram o JTable não é o excel, é muito mais divertido, dando uma “googleada” consegui o seguinte código, se alguém também precisar, que resolveu o meu problema:
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;
public class TabelaTextAreaRenderer extends JTextArea implements TableCellRenderer{
// This method is called each time a cell in a column
// using this renderer needs to be rendered.
public TabelaTextAreaRenderer(){
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
// 'value' is value contained in the cell located at
// (rowIndex, vColIndex)
if (isSelected) {
// cell (and perhaps other cells) are selected
}
if (hasFocus) {
// this cell is the anchor and the table has the focus
}
// Configure the component with the specified value
setText(value.toString());
// Set tool tip if desired
setToolTipText((String)value);
// Since the renderer is a component, return itself
return this;
}
}
Este código transforma uma célula de um JTable em uma TextArea ou qualquer outro componente que quizer.
Realmente o tópico é bem antigo e realmente eu não me recordo onde é que está o código onde usei isto. Porém, alguém me corrija se eu estiver errado, se eu não me engano funciona assim:
//Declaração da tua tabela
JTable tbl = new JTable();
//
tbl.getColumnModel().getColumn(/*índice da tua coluna*/).setCellRenderer(/*----> seu cell renderer aqui <----*/);
obs: Estou considerando que você já tenha criado o seu CellRenderer.