Eai galera, preciso de uma ajuda! Tenho uma JTable…com duas colunas e estou tentando inserir mais 2 colunas (uma com imagens de ok e outra com del).
Criei uma classe de modelo para as tabelas…
public class AppTabela extends AbstractTableModel{
private ArrayList linhas = null;
private String [] colunas = null;
private boolean [] colsEdicao;
public AppTabela(ArrayList dados, String[] colunas, boolean [] edicao)
{
setLinhas(dados);
setColunas(colunas);
colsEdicao = edicao;
}
public int getColumnCount() {return getColunas().length;}
public int getRowCount() {return getLinhas().size();}
public Object getValueAt(int rowIndex, int columnIndex) {
String [] linha = (String [])getLinhas().get(rowIndex);
return linha[columnIndex];
}
public String[] getColunas() {return colunas;}
public ArrayList getLinhas() {return linhas;}
public void setColunas(String[] strings) {colunas = strings;}
public void setLinhas(ArrayList list) {linhas = list;}
public void setValueAt(Object value, int row, int col){
String [] linha = (String [])getLinhas().get(row);
linha[col] = (String)value;
fireTableCellUpdated(row,col);
}
public boolean isCellEditable(int row, int col){
return colsEdicao[col];
}
public void addRow( String [] dadosLinha){
getLinhas().add(dadosLinha);
int linha = getLinhas().size()-1;
fireTableRowsInserted(linha,linha);
return;
}
public void removeRow(int row){
getLinhas().remove(row);
fireTableRowsDeleted(row,row);
}
public boolean removeRow(String val, int col){
Iterator i = getLinhas().iterator();
int linha = 0;
while(i.hasNext()){
String[] linhaCorrente = (String[])i.next();
linha++;
if( linhaCorrente[col].equals(val) ){
getLinhas().remove(linha);
fireTableRowsDeleted(linha,linha);
return true;
}
}
return false;
}
public void subst(String [ ] dadosLinha,int row)
{
getLinhas().remove(row);
getLinhas().add(row,dadosLinha);
fireTableRowsInserted(row,row);
return;
}
public String getColumnName(int col){
return getColunas()[col];
}
}
Uma classe para Imagem
class Imagem extends JLabel implements TableCellRenderer{
public Imagem(){
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column){
Icon imagem = new ImageIcon("images/ok.jpg");
if(isSelected)
setBackground(table.getSelectionBackground());
else
setBackground(table.getBackground());
setIcon(imagem);
setText(value.toString());
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) {}
}
E depois eu a chamo na fução createJTable()
ArrayList dados = new ArrayList();
String[] colunas = new String[] { "ID","Nome"};
boolean [] edicao = {false, false};
conecta = new AppConectaBd();
conecta.novaConexao();
try
{
String query = "SELECT id,nome FROM cliente";
Statement st = conecta.c.createStatement();
ResultSet rs = st.executeQuery(query);
while(rs.next())
{
dados.add(new String[] {String.valueOf(rs.getInt("id")),rs.getString("nome")});
}
conecta.fechaConexao();
}catch(Exception e )
{
JOptionPane.showMessageDialog(null, "Não Passou!! Erro:"+e, "bd", JOptionPane.ERROR_MESSAGE);
}
modelo = new AppTabela(dados, colunas, edicao);
JTable jtable = new JTable(modelo);
TableCellRenderer tcr = new Imagem();
TableColumn column = jtable.getColumnModel().getColumn(1);
column.setCellRenderer(tcr);
jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
return jtable;
O problema é que eu só consigo jogar a imagem antes do conteudo de um campo e eu preciso jogar esta imagem em todas as linhas de outra coluna! Para depois tratar qdo clicar em cima delas… :?