Ler uma JLabel de uma JTable

5 respostas
yurifw

eu tenho uma JTable, eu usei um CellRenderer pra poder fazer com que uma das colunas dessa tabela seja uma Jlabel com um ícone

public class TableCellRendererPersonalizado extends DefaultTableCellRenderer {
    ImageIcon icon = new ImageIcon(getClass().getResource("/imagens/nvl0.png"));
    public TableCellRendererPersonalizado (ImageIcon icon) {
        this.icon=icon;                                                         

   }
   JLabel lbl = new JLabel();
    public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int col) {
        
        lbl.setIcon(icon);
        return lbl;
    }
}

(o código do CellRenderer)

no meu codigo, tem um metodo chamado getNivel, que pede como parametro uma JLabel, e a partir do icone que esta sendo usado pra essa label ele me retorna uma informação, eu preciso enviar a label que está nessa celula como parametro desse metodo, alguem sabe como?

o código do meu evento:

private void tableAntecedentesMouseClicked(java.awt.event.MouseEvent evt) {
        int row = tableAntecedentes.rowAtPoint(evt.getPoint());
        int col = tableAntecedentes.columnAtPoint(evt.getPoint());
        JOptionPane.showMessageDialog(null, "disparou o evento na celula: "+row+","+col);
        
        JLabel label=(JLabel)antecedentes.getValueAt(row, col);        

        int nivel=getNivel(label);
        JOptionPane.showMessageDialog(null, nivel);        

    }

obs.: antecedentes é uma instancia do meu TableModel

o código do metodo getNivel:

public int getNivel(JLabel label) {
        int nivel = 0;
        for (int i = 0; i < label.getIcon().toString().length(); i++) {
            try {
                nivel = Integer.parseInt(label.getIcon().toString().substring(i, i + 1));
            } catch (NumberFormatException e) {
            }
        }
        return nivel;
    }

muito obrigado desde ja xD

5 Respostas

yurifw

a parte de receber o valor da label eu ja consegui, inclusive, agora eu vejo q foi uma pergunta meio tola, mas eu ainda preciso saber como mudar o icone da label que esta na celula q foi clicada, alguem?

ViniGodoy

É bem simples.

  1. Faça seu TableModel retornar o nome do ícone na coluna desejada;
  2. Faça seu TableModel retornar Icon.class na coluna desejada;
  3. Associe o seu renderer como default (suaTabela.setDefaultRenderer) para a classe Icon.class;
  4. Atere seu renderer para usar o nome do ícone da coluna.
yurifw

tem como explicar um pouco melhor? eu tentei aqui e não consegui passar nem do passo 1 ^^"
é pra criar um metodo novo ou pra modificar algum ja existente?
o código do meu TableModel

public class DefaultTableModelPersonalizado extends DefaultTableModel {

    int controle;

    public DefaultTableModelPersonalizado(String[] colunas, int linhas, int controle) {
        super(colunas, linhas);
        this.controle = controle;
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        if (controle == 1 && column == 1) {
            return false;
        } else {
            return true;
        }
    }

    
    @Override
    public Object getValueAt (int row, int column) {
        Object object=null;
        Vector rowVector = (Vector)dataVector.elementAt(row);
        if (this.controle==1 && column ==1)
        {
            return (JLabel)object;
        }
        
        return rowVector.elementAt(column);
    }

    public String getNomeIcone (int row) {
        String nome;        
        nome=getValueAt(row,1).toString();
        return nome;
    }


}
ViniGodoy

É porque faltou o passo 0:
0. Aprenda a fazer seu próprio TableModel. Veja os links da minha assinatura.

yurifw

vou dar uma olhada, vlw!

Criado 15 de janeiro de 2012
Ultima resposta 15 de jan. de 2012
Respostas 5
Participantes 2