Evento na Checkbox da JTable

2 respostas Resolvido
N

Eu crie um model de tabela com uma coluna com checkbox. Mas eu quero que ao colocar um evento na checkbox. Alguem pode me ajudar?

Modelo da JTable

package Modelo.Swing;

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

import Modelo.Ingrediente;

@SuppressWarnings("serial")
public class CriarPizzaTableModel extends AbstractTableModel {

	private ArrayList<Ingrediente> dados;
	private ArrayList<Boolean> colunaCheckbox;
	private String[] colunas = { " ", "Nome", "Preço" };

	@Override
	public int getRowCount() {
		return dados.size();
	}

	@Override
	public int getColumnCount() {
		return this.colunas.length;
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		switch (columnIndex) {
		case 0:
			return colunaCheckbox.get(rowIndex);
		case 1:
			return dados.get(rowIndex).getNome();
		case 2:
			return dados.get(rowIndex).getValorString();
		}
		return null;
	}

	@Override
	public String getColumnName(int column) {
		return colunas[column];
	}

	public void addRow(Ingrediente ingrediente) {
		dados.add(ingrediente);
		colunaCheckbox.add(Boolean.FALSE);
	}

	public void setDados(ArrayList<Ingrediente> dados) {
		this.dados = dados;
		for (int i = 0; i < dados.size(); i++) {
			colunaCheckbox.add(Boolean.FALSE);
		}
	}

	@Override
	public Class<?> getColumnClass(int columnIndex) {
		@SuppressWarnings("rawtypes")
		Class[] types = { java.lang.Boolean.class, java.lang.String.class, java.lang.String.class };
		return types[columnIndex];
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		if (columnIndex == 0)
			return true;
		return false;
	}

	@Override
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		if (columnIndex == 0) {
			this.colunaCheckbox.set(rowIndex, (Boolean) aValue);
		}
	}

	public ArrayList<Ingrediente> getDados() {
		return dados;
	}

	public ArrayList<Boolean> getColunaCheckbox() {
		return colunaCheckbox;
	}

	@Override
	public int findColumn(String columnName) {
		for (int i = 0; i < colunas.length; i++) {
			if (colunas[i].equals(columnName))
				return i;
		}
		return -1;
	}

}

2 Respostas

staroski
Solucao aceita

É só você fazer o que quer nesse método aqui:

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    if (columnIndex == 0) {
        this.colunaCheckbox.set(rowIndex, (Boolean) aValue);
        // aqui você chama algum outro método ou notifica os objetos que precisam
    }
}
N

obrigado, isso q eu precisava!

Criado 4 de novembro de 2018
Ultima resposta 31 de ago. de 2019
Respostas 2
Participantes 2