Foros del Web » Programación para mayores de 30 ;) » Java »

Poner un JButton en un JTable

Estas en el tema de Poner un JButton en un JTable en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 03/02/2015, 16:51
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 14 años, 10 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
  #2 (permalink)  
Antiguo 04/02/2015, 07:09
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Poner un JButton en un JTable

Hola.

"me sale un error" ... ¿qué error y dónde?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 04/02/2015, 08:55
Avatar de cesar203  
Fecha de Ingreso: enero-2010
Ubicación: LIMA
Mensajes: 27
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Poner un JButton en un JTable

Código Java:
Ver original
  1. @Override
  2.     public Class<?> getColumnClass(int columnIndex) {
  3.     //return String.class;
  4.          System.out.print(columnIndex+"=");
  5.           System.out.println(tiposColumnas[columnIndex]);
  6.           if(columnIndex<=2){
  7.             return String.class;  
  8.           }
  9.          
  10.        return JButton.class;  
  11.    // return tiposColumnas[columnIndex];
  12.      
  13.     }

es en este metodo es el error:
al parecer quere mostrar el boton
aqui te dejo un pantallaso:

https://sites.google.com/site/reparacioncomputadorasperu/home/erro1.png
ojala me puedas ayudar o decirme que modificar

Etiquetas: jtable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:27.