Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2015, 16:51
Avatar de cesar203
cesar203
 
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 14 años, 3 meses
Puntos: 0
Poner un JButton en un JTable

bueno hey estado biendo muchos link y foros pero aun no encuentro la solucion ah mi problema ya tengo arnado mi jtable pero cuando quiero mostrar el JButton me sale un error bueno estoy trabajando con netbiens 8
tengo 3 archivos
1.clas persona:

Código Java:
Ver original
  1. package Botones_con_Modelo2;
  2.  
  3.  
  4. import java.util.ArrayList;
  5. import javax.swing.JButton;
  6.  
  7. /**
  8.  *
  9.  * @author Administrador
  10.  */
  11. public class Persona {
  12.  
  13.     private String codigo;
  14.     private String nombre;
  15.     private String apellido;
  16.      private JButton boton;
  17.  
  18.  
  19.     public Persona(String codigo, String nombre, String apellido,JButton boton) {
  20.         this.codigo = codigo;
  21.         this.nombre = nombre;
  22.         this.apellido = apellido;
  23.         this.boton = boton;
  24.      
  25.     }
  26.  
  27.     public Persona() {
  28.  
  29.     }
  30.  
  31.     public String getCodigo() {
  32.         return codigo;
  33.     }
  34.  
  35.     public void setCodigo(String codigo) {
  36.         this.codigo = codigo;
  37.     }
  38.  
  39.     public String getNombre() {
  40.         return nombre;
  41.     }
  42.  
  43.     public void setNombre(String nombre) {
  44.         this.nombre = nombre;
  45.     }
  46.  
  47.     public String getApellido() {
  48.         return apellido;
  49.     }
  50.  
  51.     public void setApellido(String apellido) {
  52.         this.apellido = apellido;
  53.     }
  54.  
  55.  
  56.  
  57.     //Aqui llenamos la misma clase con los clientes
  58.  
  59.     public JButton getBoton() {
  60.         return boton;
  61.     }
  62.  
  63.     public void setBoton(JButton boton) {
  64.         this.boton = boton;
  65.     }
  66.    
  67.  
  68. }

Otro modelo Persona:

Código Java:
Ver original
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import javax.swing.JButton;
  4. import javax.swing.event.TableModelListener;
  5. import javax.swing.table.AbstractTableModel;
  6. import javax.swing.table.TableModel;
  7. /**
  8.  *
  9.  * @author Administrador
  10.  */
  11. public class TMPersona  extends AbstractTableModel{
  12. private List<Persona> personas;
  13.  
  14.  final Class[] tiposColumnas = new Class[]{
  15.            
  16.             java.lang.String.class,
  17.             java.lang.String.class,
  18.             java.lang.String.class,
  19.            
  20.             JButton.class // <- noten que aquí se especifica que la última columna es un botón
  21.         };
  22.  
  23.  Class[] tipos = tiposColumnas;
  24. public TMPersona(List<Persona> lista){
  25.     personas=lista;
  26.    
  27. }
  28.     @Override
  29.     public int getRowCount() {
  30.         return personas.size();
  31.        
  32.     }
  33.  
  34.     @Override
  35.     public int getColumnCount() {
  36.         return 4;
  37.        
  38.     }
  39.  
  40.     @Override
  41.     public String getColumnName(int columnIndex) {
  42.         String titulo=null;
  43.         switch(columnIndex){
  44.             case 0:{
  45.                titulo="ID";
  46.                        break;
  47.             }
  48.               case 1:{
  49.                titulo="Nombre";
  50.                        break;
  51.             }
  52.              
  53.                 case 2:{
  54.                titulo="Apellido";
  55.                        break;
  56.             }
  57.                  case 3:{
  58.                titulo="boton";
  59.                        break;
  60.             }
  61.            
  62.         }
  63.       return titulo;
  64.     }
  65.  
  66.     @Override
  67.     public Class<?> getColumnClass(int columnIndex) {
  68.     //return String.class;
  69.          System.out.print(columnIndex+"=");
  70.           System.out.println(tiposColumnas[columnIndex]);
  71.           if(columnIndex<=2){
  72.             return String.class;  
  73.           }
  74.          
  75.        return JButton.class;  
  76.    // return tiposColumnas[columnIndex];
  77.      
  78.     }
  79.    
  80. //    
  81. //    @Override
  82. //     public Class getColumnClass(int columnIndex) {
  83. //                // Este método es invocado por el CellRenderer para saber que dibujar en la celda,
  84. //                // observen que estamos retornando la clase que definimos de antemano.
  85. //          System.out.println(columnIndex+"=");
  86. //          System.out.println(tipos[columnIndex].toString());
  87. //                return tipos[columnIndex];
  88. //                
  89. //              
  90. //            }
  91. //    
  92.  
  93.     @Override
  94.     public boolean isCellEditable(int rowIndex, int columnIndex) {
  95.       if(columnIndex==0){
  96.           return false;
  97.       }else{
  98.           return true;
  99.       }
  100.     }
  101.  
  102.     @Override
  103.     //esta en al funcion que me dice el valor devuelto
  104.     //devuele el valor de l tabla
  105.     public Object getValueAt(int rowIndex, int columnIndex) {
  106.        Persona p=personas.get(rowIndex);
  107.         String valor=null;
  108.         switch(columnIndex){
  109.             case 0:{
  110.                valor=p.getCodigo();
  111.                break;
  112.             }
  113.               case 1:{
  114.                valor=p.getNombre();
  115.                        break;
  116.             }
  117.              
  118.                 case 2:{
  119.                valor=p.getApellido();
  120.                        break;
  121.             }
  122.            
  123.         }
  124.       return valor;
  125.        
  126.     }
  127.  
  128.     @Override
  129.     //si  yo modifico de forma grafica se guardaran los cambios
  130.     public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
  131.        
  132.         Persona p=personas.get(rowIndex);
  133.        
  134.         switch(columnIndex){
  135.             case 0:{
  136.               p.setCodigo(aValue.toString());
  137.               break;
  138.             }
  139.               case 1:{
  140.                p.setNombre(aValue.toString());
  141.               break;
  142.             }
  143.              
  144.                 case 2:{
  145.                  p.setApellido(aValue.toString());
  146.               break;
  147.             }
  148.            
  149.         }
  150.    
  151.        
  152.     }
  153.  
  154.     @Override
  155.     public void addTableModelListener(TableModelListener l) {
  156.        
  157.     }
  158.  
  159.     @Override
  160.     public void removeTableModelListener(TableModelListener l) {
  161.        
  162.     }
  163.    
  164. }

bueno un jframe generado por el netbiens


Código Java:
Ver original
  1. import java.awt.Component;
  2. import java.awt.event.MouseAdapter;
  3. import java.awt.event.MouseEvent;
  4. import java.util.List;
  5. import java.util.ArrayList;
  6. import javax.swing.JButton;
  7. import javax.swing.JOptionPane;
  8. import javax.swing.JTable;
  9. import javax.swing.table.TableCellRenderer;
  10.  
  11.  
  12. /**
  13.  *
  14.  * @author Administrador
  15.  */
  16. public class ejemplo extends javax.swing.JFrame {
  17. private List<Persona> personas;
  18.  
  19. private TMPersona modelo;
  20.     /**
  21.      * Creates new form ejemplo
  22.      */
  23.     public ejemplo() {
  24.         initComponents();
  25.         personas = new ArrayList<>();
  26.        
  27.         personas.add(new Persona("1","cesar","xxx", new JButton("Clic aquí")));
  28.         personas.add(new Persona("2","juan","xxx", new JButton("Clic aquí")));
  29.         personas.add(new Persona("3","pedro","auxxxris", new JButton("Clic aquí")));
  30.         modelo= new TMPersona(personas);
  31.        
  32.         tabla.setModel(modelo);
  33.        
  34.                 // El objetivo de la siguiente línea es indicar el CellRenderer que será utilizado para dibujar el botón
  35.         tabla.setDefaultRenderer(JButton.class, new TableCellRenderer() {
  36.             @Override
  37.             public Component getTableCellRendererComponent(JTable jtable, Object objeto, boolean estaSeleccionado, boolean tieneElFoco, int fila, int columna) {
  38.                 /**
  39.                  * Observen que todo lo que hacemos en éste método es retornar el objeto que se va a dibujar en la
  40.                  * celda. Esto significa que se dibujará en la celda el objeto que devuelva el TableModel. También
  41.                  * significa que este renderer nos permitiría dibujar cualquier objeto gráfico en la grilla, pues
  42.                  * retorna el objeto tal y como lo recibe.
  43.                  */
  44.                 return (Component) objeto;
  45.             }
  46.         });
  47.        
  48.        
  49.        
  50.  tabla.addMouseListener(new MouseAdapter() {
  51.             @Override
  52.             public void mouseClicked(MouseEvent e) {
  53.                 int fila = tabla.rowAtPoint(e.getPoint());
  54.                 int columna = tabla.columnAtPoint(e.getPoint());
  55.  
  56.                 /**
  57.                  * Preguntamos si hicimos clic sobre la celda que contiene el botón, si tuviéramos más de un botón
  58.                  * por fila tendríamos que además preguntar por el contenido del botón o el nombre de la columna
  59.                  */
  60.                 if (tabla.getModel().getColumnClass(columna).equals(JButton.class)) {
  61.                     /**
  62.                      * Aquí pueden poner lo que quieran, para efectos de este ejemplo, voy a mostrar
  63.                      * en un cuadro de dialogo todos los campos de la fila que no sean un botón.
  64.                      */
  65.                     StringBuilder sb = new StringBuilder();
  66.                     for (int i = 0; i < tabla.getModel().getColumnCount(); i++) {
  67.                         if (!tabla.getModel().getColumnClass(i).equals(JButton.class)) {
  68.                             sb.append("\n").append(tabla.getModel().getColumnName(i)).append(": ").append(tabla.getModel().getValueAt(fila, i));
  69.                         }
  70.                     }
  71.                     JOptionPane.showMessageDialog(null, "Seleccionada la fila " + fila + sb.toString());
  72.                 }
  73.             }
  74.         });
  75.        
  76.        
  77.        
  78.     }

por favor necesito ayuda ya que esto esta haciendo que me demore en mi proyecto:

link de descarga del proyecto:
https://drive.google.com/file/d/0Bww10gp0erhtUXR2VHBtQ0RDeTQ/view

Última edición por cesar203; 03/02/2015 a las 16:53 Razón: me falto el link de descarga