Pessoal, preciso colocar um componente dentro de uma celula de uma JTable… tipo um TextField…
Peguei um exemplo na internet de CellEditor mas o negocio não funciona de jeito nenhum… num tem santo que dá jeito…
Alguem conhece algum exemplo facinho de como fazer isso?
esse aki e com JButton mais acredito q o conceito seja o mesmo voce tem q fzr um evento em cima daquele campo q vc quer colocar o objeto!!!
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableButton3 extends JFrame
{
public TableButton3()
{
String[] columnNames = {"Date", "String", "Integer", "Decimal", ""};
Object[][] data =
{
{new Date(), "A", new Integer(1), new Double(5.1), "Delete0"},
{new Date(), "B", new Integer(2), new Double(6.2), "Delete1"},
{new Date(), "C", new Integer(3), new Double(7.3), "Delete2"},
{new Date(), "D", new Integer(4), new Double(8.4), "Delete3"}
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = 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 scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
// Create button column
ButtonColumn buttonColumn = new ButtonColumn(table, 4);
}
public static void main(String[] args)
{
TableButton3 frame = new TableButton3();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
class ButtonColumn extends AbstractCellEditor
implements TableCellRenderer, TableCellEditor, ActionListener
{
JTable table;
JButton renderButton;
JButton editButton;
String text;
public ButtonColumn(JTable table, int column)
{
super();
this.table = table;
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)
{
fireEditingStopped();
System.out.println( e.getActionCommand() + " : " + table.getSelectedRow());
}
}
}
ok consegui fazer aparecer… porem o componente q eu coloco dentro da celula nao fica acessivel… um botao nao da pra clicar… e em um componente caixa de texto nao coloco o foco
Sabe oq pode ser isso?
cara o botao clicka sim,c vc ver no promp vai printar o valor de cada botao,c vc quer fzr outra coisa e so colocar o q tem q ser feito na funcao actionPerformed(ActionEvent e),a agora a respeito do focus nao entendi direito escreve oq vc quer fazer e posta o codigo!!!
Achei mto bom e funcional. Não sabia que dava p/ inserir componentes dentro de células, como JButtons (sou iniciante na linguagem), muito bom andre2k2, parabéns