For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!
Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.
model.addRow(...)
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()); } } }
button.setVisible(false);
this.repaint();
columnModel.getColumn(column).setCellRenderer( this ); columnModel.getColumn(column).setCellEditor( this ); // maybe this could do the trick (of course outside the ButtonColumn class columnModel.getColumn(column).setCellRenderer( new ButtonColumn()); columnModel.getColumn(column).setCellEditor( new ButtonColumn() );
public static void main(String[] args) { ProvaRendererCells frame = new ProvaRendererCells();; frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setVisible(true); }
public ProvaRendererCells() { super("JTableButton Demo"); DefaultTableModel tableModel = makeTableModel(); JTable table = new JTable(tableModel); table.setDefaultRenderer(JButton.class, myRenderer); JScrollPane scrollPane = new JScrollPane(table); setContentPane(scrollPane); }
private DefaultTableModel makeTableModel(){ Vector rows = new Vector(); Vector row1 = new Vector(); Vector columns = new Vector(); columns.addElement(""); columns.addElement(""); JButton bottoneA = new JButton(""); bottoneA.setActionCommand("Button1"); bottoneA.addActionListener((ActionListener)myRenderer); row1.addElement(bottoneA); row1.addElement(bottoneA); rows.addElement(row1); DefaultTableModel tableModel = new DefaultTableModel(rows, columns){ @Override public Class getColumnClass(int column){ return getValueAt(0, column).getClass(); } }; return tableModel; }
class MyRenderer implements TableCellRenderer, ActionListener { public void actionPerformed(ActionEvent e) { System.out.println("---->WORKS"); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(value instanceof Component){ return (Component)value; } } }