io uso una classe apposta che identifica il bottone..
codice:import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractCellEditor; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; public class ButtomColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener, Globals{ JTable table; JButton renderButton; JButton editButton; String text; public ButtomColumn(JTable table, int column){ super(); this.table = table; renderButton = getJButton(); editButton = getJButton(); 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(value == null){ renderButton.setText(""); }else{ renderButton.setText(value.toString()); } // il metodo restituisce un panel per evitare il ridimensionamento del jButton JPanel jPanel = new JPanel(); jPanel.setBackground(table.getBackground()); jPanel.setLayout(new GridBagLayout()); jPanel.add(renderButton, new GridBagConstraints()); jPanel.add(renderButton); return jPanel; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){ if(value==null){ text = ""; }else{ text = 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()); } private javax.swing.JButton getJButton() { JButton jButton = new JButton(); jButton.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jButton.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); jButton.setPreferredSize(new Dimension(30, 28)); jButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 12)); jButton.setIcon(new ImageIcon(getClass().getResource(Globals.IMG_CONSOLE_APRI_PDF))); return jButton; } }
e alla table specifico che la colonna n appartiene alla classe appena riportata :
codice:public javax.swing.JTable getJTable() { // PREPARO INTESTAZIONI TABELLA String[] columnNames = {"Sel", "Prog", "Num. Ordine", "Data Ordine", "Nome File", "Stato", "Cod Cliente", "Descr Cliente", "", "Pdf"}; model = new PersonalTableModel(lista, columnNames); table = new JTable(model); table.getTableHeader().setReorderingAllowed( false ); table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setPreferredScrollableViewportSize(new Dimension(780,326)); // colonne personalizzate new ImageColumn(table,8); new ButtomColum(table,9); // colonne nascoste table.removeColumn(table.getColumnModel().getColumn(4)); table.removeColumn(table.getColumnModel().getColumn(4)); table.removeColumn(table.getColumnModel().getColumn(4)); // colonne ridimensionate table.setRowHeight(30); table.getColumn("Sel").setPreferredWidth(35); table.getColumn("Prog").setPreferredWidth(65); table.getColumn("Num. Ordine").setPreferredWidth(140); table.getColumn("Data Ordine").setPreferredWidth(120); table.getColumn("Descr Cliente").setPreferredWidth(380); table.getColumn("Pdf").setPreferredWidth(60); table.getColumn("").setPreferredWidth(35); return table; }


Rispondi quotando