JTable + Imagem + JButton

5 respostas
O

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.

5 Respostas

B

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.

T
Olá! Para inserir imagens na JTable, eu faço assim: Pega o modelo
/**
	 * 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;
	}
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

B

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.

O

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.<em>;

import java.awt.event.</em>;

import javax.swing.<em>;

import javax.swing.table.</em>;

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()+"\"");
    

    }

T
Só pra facilitar a leitura...
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()+"\"");
}
Criado 28 de novembro de 2006
Ultima resposta 3 de set. de 2008
Respostas 5
Participantes 5