1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Colorir linha e alinhar as colunas de um JTable com DefaultTableCellRenderer

Bem, eu o que eu queria era que a minha JTable executasse o método tamanhoColunas() e PreencherLinhas() no construtor do meu JFrame sem erros, porém quando eu executo a tela ele apenas alinha as colunas para o centralizado pelo método tamanhoColunas(), e o método ColorirLinha() que está dentro do método PreencherLinhas() não é executado. Acredito que o erro esteja aqui tabela.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()), pois ao chamar o método ColorirLinha() ele instancia um novo DefaultTableCellRenderer.

Resumindo eu queria deixar o alinhamento das colunas da tabela centralizado e colorir as linhas da minha tabela

Aí vai os 3 métodos abaixo

    public Colorir() {
        initComponents();
        PreencherLinhas(cmb.getSelectedIndex()); //Tem um combo box aqui para escolher a pintura
        tamanhoColunas();
    }

    public void tamanhoColunas(){
        DefaultTableCellRenderer rendererCentro = new DefaultTableCellRenderer();
        rendererCentro.setHorizontalAlignment(SwingConstants.CENTER);

        DefaultTableCellRenderer rendererDireita = new DefaultTableCellRenderer();
        rendererDireita.setHorizontalAlignment(SwingConstants.RIGHT);

        DefaultTableCellRenderer rendererEsquerda = new DefaultTableCellRenderer();
        rendererEsquerda.setHorizontalAlignment(SwingConstants.LEFT);

        JTableHeader header = tabela.getTableHeader();
        header.setPreferredSize(new Dimension(0, 20));   // define a largura do cabeçalho
        TableColumnModel modeloDaColuna = tabela.getColumnModel();

        modeloDaColuna.getColumn(0).setCellRenderer(rendererCentro);
        modeloDaColuna.getColumn(1).setCellRenderer(rendererCentro);
        modeloDaColuna.getColumn(2).setCellRenderer(rendererCentro);
        modeloDaColuna.getColumn(3).setCellRenderer(rendererCentro);

        modeloDaColuna.getColumn(0).setMaxWidth(60);
        modeloDaColuna.getColumn(0).setPreferredWidth(60);
        modeloDaColuna.getColumn(2).setMaxWidth(50);        
        modeloDaColuna.getColumn(2).setPreferredWidth(50);
        modeloDaColuna.getColumn(3).setMaxWidth(70);        
        modeloDaColuna.getColumn(3).setPreferredWidth(70);
    }

    public void PreencherLinhas(int index){
        DefaultTableModel model = (DefaultTableModel) tabela.getModel();
        model.setNumRows(0);
        model.addRow(new Object[]{
            "Daniel",
            "6.000.000", 
            16,
            true
        });
        model.addRow(new Object[]{
            "Igor",
            "7.000.000", 
            15,
            true
        });
        model.addRow(new Object[]{
            "Bruna",
            "8.000.000", 
            21,
            false
        });
        model.addRow(new Object[]{
            "Leila",
            "9.000.000", 
            45,
            false
        });
        ColorirLinha(index);
    }

    public void ColorirLinha(int index){
        tabela.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value,
                    boolean isSelected, boolean hasFocus, int row, int column){
                Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if(index == 0){
                    component.setBackground(row % 2 == 0 ? Color.RED : Color.BLUE);
                } else if(index == 1){
                    component.setBackground(Color.WHITE);
                    int linha = tabela.convertRowIndexToModel(row);
                    int idade = (int) tabela.getValueAt(linha, 2);
                    if(idade > 18){
                        component.setBackground(Color.CYAN);
                    }
                }
                return component;
            }
        });
    }

Eu já tentei criar uma variável do tipo DefaultTableCellRenderer e trabalhar com ela nos dois métodos: tamanhoColunas() e ColorirLinha(), porém ele dava erro pedindo ) sendo que estava certo.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.