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]