Colorir LInhas

4 respostas
zzzhhh

Amigos,
gostaria de ver uma situação...como posso estar implementando uma coloração da jtable que apenas lista todo o banco trazendo todas as informações de modens instalados, disponiveis e com defeito.
eu precisava implementar uma coloração por exemplo:
o modem disponivel a linha ficar em verde
o modem instalado a linha ficar em amarelo
o modem com defeito a linha ficar em vermelha

seria possivel usando o metodo que estou usando para lista baixo....estou usando netbeans.
muito obrigado a todos

segue codigo abaixo

Conecta con = new Conecta(); //chama o conecta

    boolean pesquisa = true;
    //ResultSet RS= con.consulta("SELECT * FROM agenda WHERE nome='" +nome + "' ");//Pesquisa o mesmo nome
    ResultSet RS = con.consulta("SELECT * FROM modem order by Id,Mac");

    boolean[] canEdit = new boolean[]{
        false, false, false, false
    };

    // Nao deixa tabela editavel.
    tb_Listagem.setModel(
            new DefaultTableModel(
            new Object[][]{},
            new String[]{"ID", "ID Modem", "MacAddress", "Modelo", "Local","Data", "Condicao", "Velocidade", "Assinante",}) {

                public boolean isCellEditable(int row, int col) {
                    return false;
                }
            });

    tb_Listagem.getColumnModel().getColumn(0).setPreferredWidth(1);   // id bd
    tb_Listagem.getColumnModel().getColumn(1).setPreferredWidth(15);   // id modem
    tb_Listagem.getColumnModel().getColumn(2).setPreferredWidth(50);  //mac 
    tb_Listagem.getColumnModel().getColumn(3).setPreferredWidth(20);  //modelo
    tb_Listagem.getColumnModel().getColumn(4).setPreferredWidth(80);  //local
    tb_Listagem.getColumnModel().getColumn(5).setPreferredWidth(20); // data
    tb_Listagem.getColumnModel().getColumn(6).setPreferredWidth(50); // condicao
     tb_Listagem.getColumnModel().getColumn(7).setPreferredWidth(30); // velocidade
      tb_Listagem.getColumnModel().getColumn(8).setPreferredWidth(260); // assinante
    ListSelectionModel listMod = tb_Listagem.getSelectionModel();
    tb_Listagem.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    tb_Listagem.setColumnSelectionAllowed(false);
    tb_Listagem.setRowSelectionAllowed(true);

    javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel) tb_Listagem.getModel();

    try {
        while (RS.next()) {
            dtm.addRow(new Object[]{
                        RS.getInt("idModem"), RS.getString("Id"), RS.getString("Mac"), RS.getString("Modelo"), RS.getString("Local"), RS.getString("Data"), RS.getString("Condicao"), RS.getString("Velocidade"), RS.getString("Assinante")
                    });
            pesquisa = false;
        }
        if (pesquisa) {
            JOptionPane.showMessageDialog(this, "Nenhum Registro Encontrado", "Dados Não Localizados", JOptionPane.WARNING_MESSAGE);
        }
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "SQLException2: " + ex.getMessage());
    }

4 Respostas

zzzhhh

alguem pode me ajudar por gentileza?
obrigado

gqferreira

Veja se isso ajuda:

package view;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

/**
 *
 * @author gustavo
 */
public class Tabela extends JFrame {

    JTable tbTeste;

    public static void main(String arg[]) {
        new Tabela().setVisible(true);
    }

    public Tabela() {
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLayout(null);
        this.setSize(500,500);
        this.setLocationRelativeTo(null);

        tbTeste = new JTable();
               
        TableModel tbModel =
                new DefaultTableModel( // eu sei... mas é so um hello world...
                new String[][]{{"oi","ola"},{"hi", "hello"}},
                new String[]{"Coluna 1", "Coluna 2"}) {

                    public boolean isCellEditable(int row, int column) {
                        return false;
                    }
                };
        tbTeste.setModel(tbModel);
        tbTeste.getTableHeader().setReorderingAllowed(false);
        tbTeste.getTableHeader().setResizingAllowed(false);
        tbTeste.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //seleciona uma unica linha por vez

        tbTeste.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        tbTeste.getColumnModel().getColumn(0).setPreferredWidth(60);
        tbTeste.getColumnModel().getColumn(1).setPreferredWidth(250);

        tbTeste.setBounds(0,0,500,500);
        this.getContentPane().add(tbTeste);
        TableCellRenderer renderer = new CorSimCorNao();
        tbTeste.setDefaultRenderer(Object.class, renderer);
    }

    class CorSimCorNao extends JLabel
            implements TableCellRenderer {

        public CorSimCorNao() {
            setOpaque(true);
        }

        public Component getTableCellRendererComponent(
                JTable table, Object value,
                boolean isSelected, boolean hasFocus,
                int row, int column) {

            if ((row % 2) == 0) {
                setBackground(new Color(0, 0, 0));
                setForeground(new Color(255, 255, 255));
            } else {
                setBackground(new Color(255, 255, 255));
                setForeground(new Color(0, 0, 0));
            }

            this.setText(value.toString());
            return this;
        }
    }
}

Nesse caso, colori uma linha outra nao, mas a logica do seu problema é com vc agora ^^

zzzhhh

Amigo,
muito obrigado pelo codigo...
eu tentei implementar o seu codigo mas acho que fiz algumas coisas erradas...tem como da mais essa força.
obriago mesmo.

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:

    JTable tb_Listagem = null;


    Conecta con = new Conecta(); //chama o conecta

    boolean pesquisa = true;
    //ResultSet RS= con.consulta("SELECT * FROM agenda WHERE nome='" +nome + "' ");//Pesquisa o mesmo nome
    ResultSet RS = con.consulta("SELECT * FROM modem order by Id,Mac");

    boolean[] canEdit = new boolean[]{
        false, false, false, false
    };

    // Nao deixa alterar a ordem das colunas
    int rows = 3;
    int cols = 3;

    tb_Listagem.getTableHeader().setReorderingAllowed(false);
    tb_Listagem.moveColumn(tb_Listagem.getColumnCount() - 1, 0);



    int vColIndex = 1;
    int width = 100;
    TableColumn col = tb_Listagem.getColumnModel().getColumn(vColIndex);
    col.setMinWidth(width);
    col.setMaxWidth(width);
    col.setPreferredWidth(width);





    // Nao deixa tabela editavel.
    TableModel tbModel =
            //tb_Listagem.setModel(
            new DefaultTableModel(
            new Object[][]{},
            new String[]{"ID", "ID Modem", "MacAddress", "Modelo", "Local", "Data", "Condicao", "Velocidade", "Assinante",}) {

        public boolean isCellEditable(int row, int col) {
            return false;
        }
    };
    tb_Listagem = new JTable();
    tb_Listagem.setModel(tbModel);
    tb_Listagem.getTableHeader().setReorderingAllowed(false);
    tb_Listagem.getTableHeader().setResizingAllowed(false);


    tb_Listagem.setModel(tbModel);
    tb_Listagem.getColumnModel().getColumn(0).setPreferredWidth(1);   // id bd
    tb_Listagem.getColumnModel().getColumn(1).setPreferredWidth(15);   // id modem
    tb_Listagem.getColumnModel().getColumn(2).setPreferredWidth(50);  //mac 
    tb_Listagem.getColumnModel().getColumn(3).setPreferredWidth(20);  //modelo
    tb_Listagem.getColumnModel().getColumn(4).setPreferredWidth(80);  //local
    tb_Listagem.getColumnModel().getColumn(5).setPreferredWidth(20); // data
    tb_Listagem.getColumnModel().getColumn(6).setPreferredWidth(50); // condicao
    tb_Listagem.getColumnModel().getColumn(7).setPreferredWidth(30); // velocidade
    tb_Listagem.getColumnModel().getColumn(8).setPreferredWidth(260); // assinante
    ListSelectionModel listMod = tb_Listagem.getSelectionModel();
    tb_Listagem.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    tb_Listagem.setColumnSelectionAllowed(false);
    tb_Listagem.setRowSelectionAllowed(true);

    javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel) tb_Listagem.getModel();

    try {
        while (RS.next()) {
            dtm.addRow(new Object[]{
                        RS.getInt("idModem"), RS.getString("Id"), RS.getString("Mac"), RS.getString("Modelo"), RS.getString("Local"), RS.getString("Data"), RS.getString("Condicao"), RS.getString("Velocidade"), RS.getString("Assinante")
                    });
            pesquisa = false;
        }
        if (pesquisa) {
            JOptionPane.showMessageDialog(this, "Nenhum Registro Encontrado", "Dados Não Localizados", JOptionPane.WARNING_MESSAGE);
        }
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "SQLException2: " + ex.getMessage());
    }
    class CorSimCorNao extends JLabel
            implements TableCellRenderer {

        // COLORIR LINHAS
        public CorSimCorNao() {
            setOpaque(true);
        }

        public Component getTableCellRendererComponent(
                JTable table, Object value,
                boolean isSelected, boolean hasFocus,
                int row, int column) {

            if ((row % 2) == 0) {
                setBackground(new Color(0, 0, 0));
                setForeground(new Color(255, 255, 255));
            } else {
                setBackground(new Color(255, 255, 255));
                setForeground(new Color(0, 0, 0));
            }

            this.setText(value.toString());
            return this;
        }
    }
}
gqferreira
zzzhhh:
Amigo, muito obrigado pelo codigo... eu tentei implementar o seu codigo mas acho que fiz algumas coisas erradas...tem como da mais essa força. obriago mesmo.
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:

    Conecta con = new Conecta(); //chama o conecta

    boolean pesquisa = true;
    ResultSet RS = con.consulta("SELECT * FROM modem order by Id,Mac");
    
   
    // Nao deixa tabela editavel.
    TableModel tbModel =
            //tb_Listagem.setModel(
            new DefaultTableModel(
            new Object[][]{},
            new String[]{"ID", "ID Modem", "MacAddress", "Modelo", "Local", "Data", "Condicao", "Velocidade", "Assinante",}) {

        public boolean isCellEditable(int row, int col) {
            return false;
        }
    };
    tb_Listagem = new JTable();
    TableCellRenderer renderer = new CorSimCorNao();  // Voce esqueceu da parte mais importante... nao tinha colocado isso.
    tb_Listagem.setDefaultRenderer(Object.class, renderer);   

    tb_Listagem.setModel(tbModel);
    tb_Listagem.getTableHeader().setReorderingAllowed(false);
    tb_Listagem.getTableHeader().setResizingAllowed(false);

    tb_Listagem.getColumnModel().getColumn(0).setPreferredWidth(1);   // id bd
    tb_Listagem.getColumnModel().getColumn(1).setPreferredWidth(15);   // id modem
    tb_Listagem.getColumnModel().getColumn(2).setPreferredWidth(50);  //mac 
    tb_Listagem.getColumnModel().getColumn(3).setPreferredWidth(20);  //modelo
    tb_Listagem.getColumnModel().getColumn(4).setPreferredWidth(80);  //local
    tb_Listagem.getColumnModel().getColumn(5).setPreferredWidth(20); // data
    tb_Listagem.getColumnModel().getColumn(6).setPreferredWidth(50); // condicao
    tb_Listagem.getColumnModel().getColumn(7).setPreferredWidth(30); // velocidade
    tb_Listagem.getColumnModel().getColumn(8).setPreferredWidth(260); // assinante
    ListSelectionModel listMod = tb_Listagem.getSelectionModel();
    tb_Listagem.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    tb_Listagem.setColumnSelectionAllowed(false);
    tb_Listagem.setRowSelectionAllowed(true);

    javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel) tb_Listagem.getModel();

    try {
        while (RS.next()) {
            dtm.addRow(new Object[]{
                        RS.getInt("idModem"), RS.getString("Id"), RS.getString("Mac"), RS.getString("Modelo"), RS.getString("Local"), RS.getString("Data"), RS.getString("Condicao"), RS.getString("Velocidade"), RS.getString("Assinante")
                    });
            pesquisa = false;
        }
        if (pesquisa) {
            JOptionPane.showMessageDialog(this, "Nenhum Registro Encontrado", "Dados Não Localizados", JOptionPane.WARNING_MESSAGE);
        }
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "SQLException2: " + ex.getMessage());
    }
   /* class CorSimCorNao extends JLabel //tire essa classe de dentro do action do botao
            implements TableCellRenderer {

        // COLORIR LINHAS
        public CorSimCorNao() {
            setOpaque(true);
        }

        public Component getTableCellRendererComponent(
                JTable table, Object value,
                boolean isSelected, boolean hasFocus,
                int row, int column) {

            if ((row % 2) == 0) {
                setBackground(new Color(0, 0, 0));
                setForeground(new Color(255, 255, 255));
            } else {
                setBackground(new Color(255, 255, 255));
                setForeground(new Color(0, 0, 0));
            }

            this.setText(value.toString());
            return this;
        }
    }*/
}

Tinha muita coisa fora do lugar, esqueceu de colocar algumas coisas que mostrei no exemplo, colocou a class no lugar errado..

Procure algumas apostila sobre MVC...
Isso não é o ideal:tb_Listagem
Coloque tbListagem.
Nome de variavel e objeto começa com letra minuscula e se houver palavra composta, diferencie com letra maiuscula. Ex: variavelNomeComposto

Criado 14 de novembro de 2010
Ultima resposta 15 de nov. de 2010
Respostas 4
Participantes 2