JTable - Bug com uma palavra específica

3 respostas
samirrolemberg

Olá pessoal, estou desenvolvendo uma aplicação utilizando JTable com um Model personalizado que precisa reconhecer uma lista de palavras e executar uma outra determinada ação apartir desta lista.

aqui o código que adiciona um texto a listagem:

//método acessivel apenas para a classe de controle (a qual implementa o ActionEvent)
	private void eventsOfContentPane(ActionEvent e){
		if (e.getActionCommand().equals(buttonAddTag.getText())) {
			TagListTableModel tagListTableModel = (TagListTableModel)tableTags.getModel();
			tagListTableModel.addRow(textFieldAddTag.getText());
			textFieldAddTag.setText(null);
		}		
	}

aqui o código da TableModel personalizada (apenas o código referente ao addRow):

private List<String> rows= null; //este, foi iniciado no contrutor deste tablemodel
	
public void addRow(String string){
		rows.add(string);//adiciona na lista
		int lastIndex = getRowCount()-1;		
		fireTableRowsInserted(lastIndex, lastIndex);
	}

a tabela funciona muito bem, mas o que me intriga é que, toda vez que alguém insere uma linha no registro com o nome de: “” a linha da tabela aparece vazia (como na imagem em anexo).

alguém já viu esse “problema” ou sabe a razão disto?


3 Respostas

ViniGodoy

Sim. O JLabel interpreta HTML por padrão. E ele é usado como renderer padrão da sua tabela.
Você pode tentar criar um novo renderer personalizado, retornando um JLabel também.

E então usar a propriedade:

Para ver como se cria um visualizador personalizado, leia:
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#renderer

Para ver um bug report falando do seu problema, veja:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4652898

samirrolemberg

bom, funcionou!

ficou assim:

//este é o código de criação da tabela num JDialogX.class
					tableTags = new JTable(new TagListTableModel());
					tableTags.setDefaultRenderer(String.class, new DateRendererTagList());
					scrollPane.setViewportView(tableTags);
//esta é a classe customizada que extende um DefaultTableCellRenderer
import javax.swing.table.DefaultTableCellRenderer;

public class DateRendererTagList extends DefaultTableCellRenderer {

	private static final long serialVersionUID = 3115845228660926408L;

	public DateRendererTagList() {
		// TODO Auto-generated constructor stub
		super();
		this.putClientProperty("html.disable", Boolean.TRUE);//aqui a chamada do código em questão
	}
}

e eu não sabia que as células do JTable eram JLabel’s. bem enfim, vou dar uma lida no bug report também,

valeu ViniGodoy.

ViniGodoy

Legal. :slight_smile:

Criado 15 de julho de 2011
Ultima resposta 15 de jul. de 2011
Respostas 3
Participantes 2