Por favor, preciso de colorir uma celula urgentemente =/

2 respostas
A

Hey, tenho uma tabela chamada:

TabelaHorario

com o modelo:

modelotabela

String[][] matriz = new String[5][12]; DefaultTableModel modelotabela=new DefaultTableModel(new Object [][] { }, matriz); TabelaHorario.setModel(modelotabela)

Eu simplesmente preciso que se um valor dentro de uma celula for “XYZ” seja azul ou “AAA” seja verde, por exemplo

Eu já estou farto, mesmo muito, de ver os tópicos de aqui e em inglês de outros sites sobre como colorir uma célula. Mas eu vejo classes e afins e simplesmente não percebo como aplicar neste caso =/

Por favor, é mesmo urgente, dia 16 é o meu prazo e gostaria de ter a funcionalidade que usa isto pronta

Já agora, criei bem o modelotabela?

2 Respostas

B

Olá alphajava,

Creio que seja exatamente isto que vc esteja precisando. Não fui eu quem fiz esta classe, e nunca a usei. Peguei de um site www.recomende.com, que possui alguns bons códigos. Esse site costuma ser pago, mas esses dias está liberado. Dá uma olhada lá depois!

import javax.swing.*;
import java.awt.*;
import javax.swing.table.*;

public class Estudos extends JFrame{
  public Estudos(){
    super("Exemplo de uma tabela simples");
		
    // colunas da tabela
    String[] colunas = {"Nome", "Idade", "Sexo"};
		
    // conteúdo da tabela	
    Object[][] conteudo = {
        {"Osmar J. Silva", "32", "Masculino"},
        {"Maria Clara Gomes", "19", "Feminino"},
        {"Fernando Gomes", "15", "Masculino"},
        {"Carlos Vieira", "40", "Masculino"}
    };
        
    // constrói a tabela
    JTable tabela = new JTable(conteudo, colunas);
    
    // quero colorir o fundo das células da segunda coluna
    // se o valor encontrado for menor que 20
    TableCellRenderer tcr = new Colorir();
    TableColumn column = 
      tabela.getColumnModel().getColumn(1);
	column.setCellRenderer(tcr);
 
    tabela.setPreferredScrollableViewportSize(new 
        Dimension(350, 50));
	
    Container c = getContentPane();
    c.setLayout(new FlowLayout());
			
    JScrollPane scrollPane = new JScrollPane(tabela);
    c.add(scrollPane);
    	
    setSize(400, 300);
    setVisible(true);
  }
B

Ola,

Crie uma classe que extenda a javax/swing.table.DefaultTableCellRenderer, sobrescreva o metodo getTableCellRendererComponent, este tem a coluna e a linha que está sendo “pintada”, com isto vc consegue fazer o que quizer com o desenho da celula, sendo que vc pode criar um JLabel, que será o retorno, e pinta-lo da forma que vc quizer, o parametro “value” que vc recebe é o que ficará na celula, o retorno do metodo getValueAt(row,coluna) do seu modelo.

Só pra te adiantar, para vc adicionar o renderer, tem que ir coluna a coluna:

MyTable table... MyRenderer renderer = ... for(int x=0;x<table.getColumnModel().getColumnCount() ;x++){ TableColumn column = table.getColumnModel().getColumn(x); column.setCellRenderer(renderer); } ...

Criado 14 de janeiro de 2008
Ultima resposta 14 de jan. de 2008
Respostas 2
Participantes 3