JTable + Imagem + JButton

Bom dia galera, beleza…
Seguinte pessoal, preciso gerar um JTable o qual as duas ultimas colunas são um JButton e um Imagem, a imagem na verdade é apenas uma associação ao tipo de arquivo, JPG, GIF ou PNG. A parte do JButton até consegui fazer, dando uma olhada nos exemplos que vem no JDK, agora essa parte das imagens está complicado.
Alguem pode me ajudar?
Obrigado e Bom dia.

lnd007,

Você conseguiu inserir um botão em uma célula de um JTable, é isso? Caso sim, poderia postar aqui como foi que você resolveu isso? Pois a um tempinho atrás eu tentei fazer isso para um trabalho e não consegui fazer. Acabei deixando de lado e solucionei o meu problema de uma outra maneira. Não foi a melhor escolha, mas a mais rápida.
Aguardo uma resposta.
Abraços.

Olá!
Para inserir imagens na JTable, eu faço assim:
Pega o modelo

[code]
/**
* Método que inicializa e configura o modelo da tabela.
* Considerando que esta classe possua o atributo seguinte no topo:
* “private DefaultTableModel modelo = null;”
*
* @return DefaultTableModel
*/
public DefaultTableModel getModel() {
if (modelo == null) {
modelo = new DefaultTableModel() {

			public Class getColumnClass(int columnIndex) {
	            Object o = getValueAt(0, columnIndex);
	            if (o == null) {
	                return Object.class;
	            }
				return o.getClass();
	        }
			
	        public boolean isCellEditable(int row, int col) {
				return false;
			}
	    };	 			   
	    modelo.addColumn("nome da coluna");//ícone vai nessa coluna
	    
	}
	return modelo;
}	[/code]

Pega a tabela

/** * Este método inicializa a tabela propriamente dita * necessario declarar "private JTable table = null;" * * @return javax.swing.JTable */ public JTable getTable() { if (table == null) { table = new JTable(getModel()); table.setName("nome da tabela"); table.getColumnModel().getColumn(3).setMaxWidth(38); table.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN); } return table; }

Adicionando a linha com o ícone na coluna

getModel().addRow( new Object []{ new ImageIcon("icons/ico_08.png")});

São apenas exemplos de como eu faço. Talvez exista melhor forma. ^^

Espero ter ajudado

Olá 007, tudo bem?
Para colocar figuras em uma jForm, por exemplo, você deve usar jLabels e setar a propriedade icom delas. DEssa forma, é como se tivesse colocado uma figura diretamente na janela. No seu caso, já que você conseguiu colocar os jButtons, pode usar o mesmo procedimento para colocar jLabels também em outras células de sua tabela. Com as jLabels no lugar, você pode colocar as imagens na guia Proprierties -> icon, se estiver usando o NetBeans. Se estiver programando manualmente, pode usar a linha:

caso o teu arquivo de imagem esteja em um arquivo .jar. Se a imagem estiver em um arquivo isolado, pode usar jLabelFulanoDeTal.setIcon(new javax.swing.ImageIcon( "c:\imagens\matrix_2x3_exemplo.gif"));
Não lembro bem quais são as regras para se usar caminhos relativos.

Espero ter ajudado.

Galera valeu meeeeeeeeeeeeeeeesmo, muito obrigado.
Caro bland, segue o codigo que fiz pra colocar os botões no JTable.
Espero que ajude.

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;

import Frames.BotaoNaColuna;
/**
*

  • @author Leandro
    */
    public class TabelaEncontrados{

    private Object[][] valoresLinhas = null;
    private JTable tabela;
    private String[] colunas = {
    “PATH”,
    “ABRIR”
    };
    private int tipo;

    /** Creates a new instance of TabelaEncontrados */
    public TabelaEncontrados(){
    montaTabela();
    }

    public TabelaEncontrados(Object[][] linhas, int t) {
    valoresLinhas = linhas;
    setTipo(t);
    //montaTabela();
    }

    public JTable montaTabela(){
    DefaultTableModel model = new DefaultTableModel(valoresLinhas, getColunas());
    tabela = new JTable( model ) {
    // Returning the Class of each column will allow different
    // renderers to be used based on Class
    public Class getColumnClass(int column) {
    return getValueAt(0, column).getClass();
    }
    };

     //JScrollPane scrollTabela = new JScrollPane(tabela);
     //add(scrollTabela);
     
     //  Create button column
     BotaoNaColuna buttonColumn = new BotaoNaColuna(tabela, 1, getTipo());
     
     return tabela;
    

    }

import java.awt.;
import java.awt.event.
;
import javax.swing.;
import javax.swing.table.
;
import Utils.Constantes;

/**
*

  • @author Leandro
    */
    public class BotaoNaColuna extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener{

    JTable table;
    JButton renderButton;
    JButton editButton;
    String text;
    private int tipo;

    /** Creates a new instance of BotaoNaColuna */
    public BotaoNaColuna(JTable table, int column, int t) {
    super();
    this.table = table;
    this.tipo = t;
    renderButton = new JButton();

     editButton = new JButton();
     editButton.setFocusPainted( false );
     editButton.addActionListener( this );
     
     TableColumnModel columnModel = table.getColumnModel();
     columnModel.getColumn(column).setCellRenderer( this );
     columnModel.getColumn(column).setCellEditor( this );
    

    }

    public Component getTableCellRendererComponent(
    JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    if (hasFocus) {
    renderButton.setForeground(table.getForeground());
    renderButton.setBackground(UIManager.getColor(“Button.background”));
    } else if (isSelected) {
    renderButton.setForeground(table.getSelectionForeground());
    renderButton.setBackground(table.getSelectionBackground());
    } else {
    renderButton.setForeground(table.getForeground());
    renderButton.setBackground(UIManager.getColor(“Button.background”));
    }

     renderButton.setText( (value == null) ? "" : value.toString() );
     return renderButton;
    

    }

    public Component getTableCellEditorComponent(
    JTable table, Object value, boolean isSelected, int row, int column) {
    text = (value == null) ? “” : value.toString();
    editButton.setText( text );
    return editButton;
    }

    public Object getCellEditorValue() {
    return text;
    }

    public void actionPerformed(ActionEvent e) {
    String prefixoExecuta = “rundll32.exe Shell32.dll,ShellExec_RunDLL”;
    String pathArquivos = “”;

     if(getTipo() == 0)
         pathArquivos = Constantes.getPATH_ARQUIVOS();
     else
         pathArquivos = Constantes.getPATH_IMAGENS();
     
     fireEditingStopped();        
     Utils.ExecutaComando.executa(prefixoExecuta + " \""+ pathArquivos + "\\" + e.getActionCommand()+"\"");
    

    }

Só pra facilitar a leitura…

[code]
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;

import Frames.BotaoNaColuna;
/**
*

  • @author Leandro
    */
    public class TabelaEncontrados{

private Object[][] valoresLinhas = null;
private JTable tabela;
private String[] colunas = {
“PATH”,
“ABRIR”
};
private int tipo;

/** Creates a new instance of TabelaEncontrados */
public TabelaEncontrados(){
montaTabela();
}

public TabelaEncontrados(Object[][] linhas, int t) {
valoresLinhas = linhas;
setTipo(t);
//montaTabela();
}

public JTable montaTabela(){
DefaultTableModel model = new DefaultTableModel(valoresLinhas, getColunas());
tabela = new JTable( model ) {
// Returning the Class of each column will allow different
// renderers to be used based on Class
public Class getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};

//JScrollPane scrollTabela = new JScrollPane(tabela);
//add(scrollTabela);

// Create button column
BotaoNaColuna buttonColumn = new BotaoNaColuna(tabela, 1, getTipo());

return tabela;
}

import java.awt.;
import java.awt.event.
;
import javax.swing.;
import javax.swing.table.
;
import Utils.Constantes;

/**
*

  • @author Leandro
    */
    public class BotaoNaColuna extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener{

JTable table;
JButton renderButton;
JButton editButton;
String text;
private int tipo;

/** Creates a new instance of BotaoNaColuna */
public BotaoNaColuna(JTable table, int column, int t) {
super();
this.table = table;
this.tipo = t;
renderButton = new JButton();

editButton = new JButton();
editButton.setFocusPainted( false );
editButton.addActionListener( this );

TableColumnModel columnModel = table.getColumnModel();
columnModel.getColumn(column).setCellRenderer( this );
columnModel.getColumn(column).setCellEditor( this );

}

public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (hasFocus) {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor(“Button.background”));
} else if (isSelected) {
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
} else {
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor(“Button.background”));
}

renderButton.setText( (value == null) ? “” : value.toString() );
return renderButton;
}

public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column) {
text = (value == null) ? “” : value.toString();
editButton.setText( text );
return editButton;
}

public Object getCellEditorValue() {
return text;
}

public void actionPerformed(ActionEvent e) {
String prefixoExecuta = “rundll32.exe Shell32.dll,ShellExec_RunDLL”;
String pathArquivos = “”;

if(getTipo() == 0)
pathArquivos = Constantes.getPATH_ARQUIVOS();
else
pathArquivos = Constantes.getPATH_IMAGENS();

fireEditingStopped();
Utils.ExecutaComando.executa(prefixoExecuta + " “”+ pathArquivos + “\” + e.getActionCommand()+""");
} [/code]