Olá, eu estava navegando esses dias na web e olhando alguns exemplos de JButtons em JTables, então eu encontrei um exemplo e modifiquei, ficou assim:
class ButtonColumn extends AbstractCellEditor
implements TableCellRenderer, TableCellEditor
{
JTable table;
JButton renderButton;
JButton editButton;
String text = "Selecionar Foto";
public ButtonColumn(JTable table, int column)
{
super();
this.table = table;
renderButton = new JButton();
editButton = new JButton();
editButton.setFocusPainted( false );
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)
{
renderButton.setFont(new Font("Comic Sans MS",Font.BOLD,13));
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(text);
return renderButton;
}
public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column)
{
text = "Selecionar Foto";
editButton.setFont(new Font("Comic Sans MS",Font.BOLD,13));
editButton.setText( text );
editButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int linha = table.getSelectedRow();
BufferedImage img = null;
ImageIcon icon = null;
File arquivo = null;
try {
arquivo = Login.leImagem();
img = ImageIO.read(arquivo);
icon = new ImageIcon(img);
} catch (IOException e1) {
e1.printStackTrace();
}
((Model)table.getModel()).setValueAt(icon,linha,6);
((Model)table.getModel()).linhas.get(0).getPessoa();
text = arquivo.getPath();
editButton.setText(text);
renderButton.setText(text);
}
});
return editButton;
}
public Object getCellEditorValue()
{
return text;
}
}`
Então criando um objeto dessa classe e passando os parâmetros consegui adicionar uma coluna de botões a minha JTable, formatei e ficou assim:
Porém eu gostaria de saber como eu faço para alterar o plano de fundo desses botões? Pois já tentei alterar o plano de fundo do renderButton e do editButton e não funcionou.
