jTable Mudar Cor de Linha

16 respostas
Mitnick8

Boas,

Tenho o seguinte código,

public void preencheTabela(javax.swing.JTable tabela, String sql) {
        conexao.executaSQL(sql);
        DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();
        modelo.setNumRows(0);

        try {
            conexao.resultset.first();
            while (conexao.resultset.next()) {
                modelo.addRow(new Object[]{conexao.resultset.getString("saida_nomemed"),
                            conexao.resultset.getString("saida_apresentacao"), conexao.resultset.getString("saida_qtd"),
                            conexao.resultset.getString("saida_data"), conexao.resultset.getString("saida_nomefavorecido"),
                            conexao.resultset.getString("saida_prec")});
            }
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Erro ao carregar Tabela" + erro);
        }
    }

o que eu gostaria de fazer é, mudar a cor de uma linha, como fazer isso neste código?

16 Respostas

Anime

Oi Mitnick8,

Se quiser pesquisar um pouco…http://www.guj.com.br/posts/list/132196.java#711627

Boa sorte!

Mitnick8

Pesquisei muito, mais não consegui fazer o código, depois disso decidi pedir ajuda.

Anime

ok :wink:

ViniGodoy
Passo #1: Livre-se do DefaultTableModel;

Passo #2: Escreva um renderer para a linha de sua tabela;

Passo #3: Faça seu model indicar que você usará aquele renderer.
M

renderer é uma boa!
Dê uma olhada na documentação da classe DefaultTableCellRenderer.

Mitnick8
<blockquote><div class="quote-author">ViniGodoy:</div>Passo #1: Livre-se do DefaultTableModel;

Passo #2: Escreva um renderer para a linha de sua tabela;

Passo #3: Faça seu model indicar que você usará aquele renderer.</blockquote>

Meu problema é exatamente como fazer isso… :frowning:

drsmachado

Aqui você terá exemplos de como trocar o DefaultTableModel http://www.guj.com.br/posts/list/149034.java#808003
O rendere você encontra pronto na net, basta dar uma “googlezada”, talvez até encontre um modelo pronto.

lina

Oi,

Crie uma inner-class que implemente TableCellRender:

class Colorir extends JLabel implements 
       TableCellRenderer{
  public Colorir(){
  	setOpaque(true);
  }
  
  public Component getTableCellRendererComponent(
     JTable table, 
     Object value, boolean isSelected, boolean hasFocus,
        int row, int column){
    
     if(row == table.getRowCount()){
       setBackground(Color.YELLOW);	
     }
     else{
       setBackground(table.getBackground());		
     }     
          	
     return this;   	
  }
  
  public void validate() {}
  public void revalidate() {}
  protected void firePropertyChange(String propertyName,
     Object oldValue, Object newValue) {}
  public void firePropertyChange(String propertyName,
     boolean oldValue, boolean newValue) {}  
}

Após a criação de sua tabela (JTable tabela = new JTable()), eu faria:

TableCellRenderer tcr = new Colorir();
TableColumn column =  tabela.getColumnModel().getColumn(1); // Apenas para a coluna 1.
column.setCellRenderer(tcr);

Agora, faça a adaptação para o seu propósito.

Tchauzin!

Mitnick8

Não deu certo :frowning:

Mais Obrigado Lina, quer casar comigo?

lina

Oi,

Insira seu código novo aqui…

Tchauzin!

Mitnick8

Oi Lina,

Deixa eu te "falar", eu fiz o que pediu pus o código nesta parte

public void preencheTabelaMedicamento(javax.swing.JTable tabela, String sql) {
        conexao.executaSQL(sql);

        DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();
        modelo.setNumRows(0);
        try {
            while (conexao.resultset.next()) {
                modelo.addRow(new Object[]{conexao.resultset.getString("med_ficha"),
                            conexao.resultset.getString("med_nome"), conexao.resultset.getString("med_qtd"),
                            conexao.resultset.getString("med_apresentacao"), conexao.resultset.getString("med_val")});
              
                TableCellRenderer tcr = new Colorir();
                TableColumn column =  tabela.getColumnModel().getColumn(1);
                column.setCellRenderer(tcr);


            }
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Erro ao carregar Tabela" + erro);
        }

    }

Porém o que queria era alterar a cor da Linha, de uma linha, pode me ajudar? ...

Anime

Oi,

Da uma olhadinha aqui,vale a pena… :wink:

http://www.java2s.com/Code/Java/Swing-JFC/InstalldifferentTableRendererforevenandoddrows.htm

lina
Mitnick8:
Oi Lina,

Deixa eu te "falar", eu fiz o que pediu pus o código nesta parte

public void preencheTabelaMedicamento(javax.swing.JTable tabela, String sql) {
        conexao.executaSQL(sql);

        DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();
        modelo.setNumRows(0);
        try {
            while (conexao.resultset.next()) {
                modelo.addRow(new Object[]{conexao.resultset.getString("med_ficha"),
                            conexao.resultset.getString("med_nome"), conexao.resultset.getString("med_qtd"),
                            conexao.resultset.getString("med_apresentacao"), conexao.resultset.getString("med_val")});
              
                TableCellRenderer tcr = new Colorir();
                TableColumn column =  tabela.getColumnModel().getColumn(1);
                column.setCellRenderer(tcr);


            }
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Erro ao carregar Tabela" + erro);
        }

    }

Porém o que queria era alterar a cor da Linha, de uma linha, pode me ajudar? ...

Oi,

Coloque o código depois da criação de sua JTable.

Tchauzin!

Mitnick8
Anime:
Oi,

Da uma olhadinha aqui,vale a pena... :wink:

[url]http://www.java2s.com/Code/Java/Swing-JFC/InstalldifferentTableRendererforevenandoddrows.htm [/url]

Oi Anime e Linda, quer dizer, Lina...

Consegui colorir a cor, mais ao tentar fazer o medicamento vencido eu não estou conseguindo, o que quero fazer é:

Colorir a linha (Medicamento) que estiver vencido, estou usando este método

public void validade() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
        try {
            Date dataNoJava = formatter.parse(txtValidade.getText());
            Date dat = new Date();

            if (dataNoJava.getTime() < dat.getTime()) {
                txtValidade.setBackground(Color.RED);
                jPanelVal.setBackground(Color.RED);
                jLabVal.setVisible(true);

            } else {
                txtValidade.setBackground(getBackground());
                jPanelVal.setBackground(getBackground());
                jLabVal.setVisible(false);

            }

        } catch (ParseException e) {
            e.printStackTrace();
        }

Este método está funcionando perfeitamente, porém queria fazer, com que ele virasse uma condição para assim fazer "colorir" a linha da tabela.

Este é o codigo que eu uso para "colorir"

public class Colorir extends JLabel implements
        TableCellRenderer {

    public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(
                table, value, isSelected, hasFocus, row, column);
        ((JLabel) renderer).setOpaque(true);
        Color background;

            if (row == 0) {
                background = Color.RED;
            } else {
                background = Color.WHITE;
            }
            renderer.setBackground(background);
            return renderer;
    }
}
Anime

Oi,

http://www.guj.com.br/posts/list/13322.java

Boa sorte! :wink:

Mitnick8

Tentei com os links que passou mais não consegui :frowning:

Criado 12 de novembro de 2010
Ultima resposta 17 de nov. de 2010
Respostas 16
Participantes 6