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 originalpackage Botones_con_Modelo2;
import java.util.ArrayList;
import javax.swing.JButton;
/**
*
* @author Administrador
*/
public class Persona {
this.codigo = codigo;
this.nombre = nombre;
this.apellido = apellido;
this.boton = boton;
}
public Persona() {
}
return codigo;
}
public void setCodigo
(String codigo
) { this.codigo = codigo;
}
return nombre;
}
public void setNombre
(String nombre
) { this.nombre = nombre;
}
return apellido;
}
public void setApellido
(String apellido
) { this.apellido = apellido;
}
//Aqui llenamos la misma clase con los clientes
return boton;
}
public void setBoton
(JButton boton
) { this.boton = boton;
}
}
Otro modelo Persona:
Código Java:
Ver originalimport java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
/**
*
* @author Administrador
*/
private List<Persona> personas;
final Class[] tiposColumnas = new Class[]{
JButton.
class // <- noten que aquí se especifica que la última columna es un botón };
Class[] tipos = tiposColumnas;
public TMPersona(List<Persona> lista){
personas=lista;
}
@Override
public int getRowCount() {
return personas.size();
}
@Override
public int getColumnCount() {
return 4;
}
@Override
public String getColumnName
(int columnIndex
) { switch(columnIndex){
case 0:{
titulo="ID";
break;
}
case 1:{
titulo="Nombre";
break;
}
case 2:{
titulo="Apellido";
break;
}
case 3:{
titulo="boton";
break;
}
}
return titulo;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
//return String.class;
System.
out.
print(columnIndex
+"="); System.
out.
println(tiposColumnas
[columnIndex
]); if(columnIndex<=2){
}
// return tiposColumnas[columnIndex];
}
//
// @Override
// public Class getColumnClass(int columnIndex) {
// // Este método es invocado por el CellRenderer para saber que dibujar en la celda,
// // observen que estamos retornando la clase que definimos de antemano.
// System.out.println(columnIndex+"=");
// System.out.println(tipos[columnIndex].toString());
// return tipos[columnIndex];
//
//
// }
//
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if(columnIndex==0){
return false;
}else{
return true;
}
}
@Override
//esta en al funcion que me dice el valor devuelto
//devuele el valor de l tabla
public Object getValueAt
(int rowIndex,
int columnIndex
) { Persona p=personas.get(rowIndex);
switch(columnIndex){
case 0:{
valor=p.getCodigo();
break;
}
case 1:{
valor=p.getNombre();
break;
}
case 2:{
valor=p.getApellido();
break;
}
}
return valor;
}
@Override
//si yo modifico de forma grafica se guardaran los cambios
public void setValueAt
(Object aValue,
int rowIndex,
int columnIndex
) {
Persona p=personas.get(rowIndex);
switch(columnIndex){
case 0:{
p.setCodigo(aValue.toString());
break;
}
case 1:{
p.setNombre(aValue.toString());
break;
}
case 2:{
p.setApellido(aValue.toString());
break;
}
}
}
@Override
}
@Override
}
}
bueno un jframe generado por el netbiens
Código Java:
Ver originalimport java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
/**
*
* @author Administrador
*/
public class ejemplo
extends javax.
swing.
JFrame { private List<Persona> personas;
private TMPersona modelo;
/**
* Creates new form ejemplo
*/
public ejemplo() {
initComponents();
personas = new ArrayList<>();
personas.
add(new Persona
("1",
"cesar",
"xxx",
new JButton("Clic aquí"))); personas.
add(new Persona
("2",
"juan",
"xxx",
new JButton("Clic aquí"))); personas.
add(new Persona
("3",
"pedro",
"auxxxris",
new JButton("Clic aquí"))); modelo= new TMPersona(personas);
tabla.setModel(modelo);
// El objetivo de la siguiente línea es indicar el CellRenderer que será utilizado para dibujar el botón
@Override
public Component getTableCellRendererComponent
(JTable jtable,
Object objeto,
boolean estaSeleccionado,
boolean tieneElFoco,
int fila,
int columna
) { /**
* Observen que todo lo que hacemos en éste método es retornar el objeto que se va a dibujar en la
* celda. Esto significa que se dibujará en la celda el objeto que devuelva el TableModel. También
* significa que este renderer nos permitiría dibujar cualquier objeto gráfico en la grilla, pues
* retorna el objeto tal y como lo recibe.
*/
}
});
@Override
int fila = tabla.rowAtPoint(e.getPoint());
int columna = tabla.columnAtPoint(e.getPoint());
/**
* Preguntamos si hicimos clic sobre la celda que contiene el botón, si tuviéramos más de un botón
* por fila tendríamos que además preguntar por el contenido del botón o el nombre de la columna
*/
if (tabla.
getModel().
getColumnClass(columna
).
equals(JButton.
class)) { /**
* Aquí pueden poner lo que quieran, para efectos de este ejemplo, voy a mostrar
* en un cuadro de dialogo todos los campos de la fila que no sean un botón.
*/
StringBuilder sb = new StringBuilder();
for (int i = 0; i < tabla.getModel().getColumnCount(); i++) {
if (!tabla.
getModel().
getColumnClass(i
).
equals(JButton.
class)) { sb.append("\n").append(tabla.getModel().getColumnName(i)).append(": ").append(tabla.getModel().getValueAt(fila, i));
}
}
JOptionPane.
showMessageDialog(null,
"Seleccionada la fila " + fila
+ sb.
toString()); }
}
});
}
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