Básicamente es crear la tabla, cargarle el modelo y agregar la data, esto se hace con la finalidad de editar el modelo que es mas fexible para utilizar solo la tabla como una especie de panel el cual contendra los datos, en realidad lo que editamos es el modelo, en otras palabras es como hacer galletas, el molde es nuestro modelo, la data es la masa y la galleta es la tabla.
Quedando claros en esto (pienso yo) vamos con algunos truquillos importantes e imprecindibles. Para crear el modelo y agregarselo a la tabla.
DefaultTableModel modelo = new DefaultTableModel(); JTable tabla = new JTable(modelo);Agregar columnas
modelo.addColumn("columna");Agregar datos.
Object [] filas = new Object[2]; filas[0] = "dato columna 1"; filas[1] = "dato columna 2"; modelo.addRow ( filas );Borrar datos.
modelo.removeRow(FILA);Modificar.
modelo.setValueAt ("nuevo dato", fila, columna);Obtener el valor donde se hace click.
public void mouseClicked(MouseEvent e) { int fila = tabla.rowAtPoint(evt.getPoint()); int columna = tabla.columnAtPoint(evt.getPoint()); if ((fila > -1) && (columna > -1)) System.out.println(modelo.getValueAt(fila,columna)); }Hacer que la celda no se edite.
public boolean isCellEditable (int row, int column){ if (column == 3) return true; return false; }Deshabilitar el movimiento de columnas.
JTable tabla = new JTable(); tabla.getTableHeader().setReorderingAllowed(false);Cambiar el tipo de dato.
public Class getColumnClass(int columna) { if (columna == 0) return Boolean.class; if (columna == 1) return Integer.class; return Object.class; }Agregarle un Scroll.
JTable tabla = new JTable(); JScrollPane scroll = new JScrollPane(tabla);
JTable tabla = new JTable(); JScrollPane scroll = new JScrollPane(); scroll.setViewportView(tabla);
Recibe notificaciones por correo
69 Comentarios
Escribir ComentarioHola Genial tu blog!!
Responderpues espero me puedas ayudar, soy principiante en java y uso netbeans, estado buscando informacion para que en el JTable no sea editable o que almenos solo 3 columnas sean editables, vi el mismo metodo que pusiste en otra pagina pero aun asi sigue siendo editable. Podrias explicarme como realizar esto?
Gracias
Y lleno mi JTable desde mi base de datos en MySql
Hola Jose, bueno, si usas netbeans la cosa va más fácil aun, lo único que debes hacer es quitarle la opción "enabled" para que el usuario no pueda editar los datos en ella, ahora, si lo que quieres es que queden totalmente ineditables el netbeans también tiene esa opción, vas a las propiedades de la tabla y la edición columnas tienes la opción "editable", la desactivas y listo, problema resuelto, aunque sinceramente no veo el problema en esto porque mientras el usuario no guarde los datos no podrá modificar nada en la BD, prueba y cuéntame como te va, saludos.
Responderggg...si eso si lo probe para que no pueda modificar toda la tabla, pero necesito que 3 columnas puedan ser editables, para que el usuario introdusca en mi caso dias trabajados, horas extras y si pidio algun prestamo.
ResponderYa que en los demas campos se calcularan automaticamente, ademas de mostrar el nombre y salario diario del empleado, una vez ingresado los dias trabajado y las horas extras, al darle en el boton guardar, se guardara en la base de datos(por sierto aqui tambien tengo problemas XD) y los campos calculados como restriccion no deben de ser modificados.
Gracias por tu pronta respuesta
Mmmm... bueno, vamos entonces por partes, primero resolvamos lo de la tabla, para todo esto lo mejor es utilizar el modelado, una vez empleado el modelo haces lo siguiente:
Responderpublic boolean isCellEditable (int fila, int columna){
if (column == LA COLUMNA)
return true;
else
return false;
}
llamas el metodo al hacer doble click indicandole lo que el usuario no podra editar la columna, "LA COLUMNA" es el numero de columna que no quieres editar, fila y columna los puedes obtener usando el método getPoint():
int fila = tabla.rowAtPoint(e.getPoint());
int columna = tabla.columnAtPoint(e.getPoint());
Prueba esto y me avisas, tranquilo que si le damos solución!!
oye el metodo se pone en la misma clase donde lleno mi modelo o donde tengo mi jpanel? pues en el jpanel fue donde puse mi metodo, y pues probe llame el metodo en el mousecliked y nada sigue siendo editable todas las columnas.
ResponderMmmmm... publica algo de tu codigo para ver como estas haciendo, es extraño que no te funcionara, el metodo debes colocarlo en cualquier parte de la clase, es indiferente donde lo coloques puesto que lo llamas y listo, en eso consiste Java.... En el mouseclicked vas a tomar los valores de la fila y columna y llamas al metodo para saber si se esta editando o no, recuerda colocar la opcion editable = false en las propiedades de la tabla con netbeans.
Responderpues utilizo dos modelos uno que visualiza los recibos de nomina guardados y otro modelo para el nuevo recibo en el nuevo recibo es donde debe de tener las restricciones
Responderif(jTable1.getModel()==Nuevomod)
{
// jTable1.setEnabled(false);
int fila = jTable1.rowAtPoint(evt.getPoint());
int colum = jTable1.columnAtPoint(evt.getPoint());
if(fila > -1)
{
getDatoTablaNuevomod(fila);//para subirlo a los jtextfield
// Nuevomod.isCellEditable(fila, colum);
isCellEditable(fila, colum);
}
// TablaNueva();
}
mi llenado de datos al modelo es parecido al tuyo solo q es en una clase normal y sin metadatos, ago un select pongo el nombre de las columnas y las voy llenando
modelo.addColumn("Nombre");//0
modelo.addColumn("SDI");//1
modelo.addColumn("DT");//2
modelo.addColumn("Horas Ex");//3
modelo.addColumn("SDN");//4
modelo.addColumn("Salario");//5
modelo.addColumn("Importe");//6
modelo.addColumn("Subsidio");//7
modelo.addColumn("Imss");//8
modelo.addColumn("Infonavit");//9
modelo.addColumn("ISR");//10
modelo.addColumn("Pension");//11
modelo.addColumn("Prestamo");//12
modelo.addColumn("Deducciones");//13
modelo.addColumn("Percepciones");//14
modelo.addColumn("Neto Pagado");//15
while(res.next())
{
Object[] fila = new Object[2];
for (int i = 0; i<2; i++)
{
fila[i] = res.getObject(i+1);
}
modelo.addRow(fila);
}
}
for(int i = 0; i<modelo.getRowCount();i++)
{
for(int c = 2; c<modelo.getColumnCount(); c++)
{
modelo.setValueAt(0, i, c);
}
}
Esto ultimo no se para que es...
Responderfor(int i = 0; i<modelo.getRowCount();i++) {
for(int c = 2; c<modelo.getColumnCount(); c++) {
modelo.setValueAt(0, i, c);
}
}
Tampoco se para que la condicion: jTable1.getModel()==Nuevomod
Al agregar un modelo a la tabla no veo necesario evaluar esa condicion, sin embargo si ya tienes una tabla swing creada en netbeans y quieres agregarla a un modelo hazlo con MiJTabla.setModel(modelo)
int fila = jTable1.rowAtPoint(evt.getPoint());
int columna = jTable1.columnAtPoint(evt.getPoint());
if ((fila > -1) && (columna > -1)) {
//Aquí puedes llamar el metodo
}
Ahora, tambien puedes hacer lo que quieres de la siguiente forma, creas el modelo como variable global
DefaultTableModel modelo = new DefaultTableModel();
llamas al metodo luego de iniciar los componentes, luego del "initComponents()"
public boolean isCellEditable (int fila, int columna) {
if (column == LaColumna) {return true;}
else {return false;}
jTable1.setModel(modelo)
}
Y por ultimo queda verificar las variables booleanas que resulten de la operacion, si aun no lo logras avisame y subo un ejemplo para que veas el funcionamiento completo de todo eso...
Gracias
ResponderBueno lo primero q me decias para q era lo del for(...) es para llenar el resto de las columnas en cada fila en 0 y asi no aparesca las demas columnas y filas vacias que va de la columna 2 a la 15.
Con respecto a jTable1.getModel()==Nuevomod como te decia utilizo dos modelos y cada uno tiene columnas diferentes y datos diferentes por eso le puse la condicion aunq tambien pudo ser un else y ya
con respecto al metodo isCellEditable no me deja introducir el jtable.setmodel(modelo); sale unrecheable statement, ademas si vuelvo a llamar el modelo, y al iniciar los componentes esta me sale vacia y debe visualizar el otro modelo que llame mod este contiene los registros previamente guardados.
mi clase contiene todos los metodos para abrir y cerrar la conexion ademas de consultas, inserciones, modificacion y borrado hacia la bd, entonces desde mi jpanel solo mando a llamar uno de estos metodos en este caso el de consulta para un nuevo recibo, este se visualiza al pulsar el boton Nuevo, agregas fecha inicial y final de la nomina pulsas agregar, y te dejara introducir dias trabajados, hrs extra y el prestamo.
bueno gracias por tu ayuda
Estamos para ayudar, en estos momentos me encuentro en el trabajo y se me hace dificil hacerme con un ejemplo, si quieres esperame hasta mañana que publique algo con respecto a esto en el blog, explicare paso por paso un ejemplo de como deshabilitar ciertas columnas y tambien hacerlas ineditables... Saludos
Responderorale genial muchas gracias!! estare dandome la vuelta mañana
ResponderTe invito a ver la nueva entrada, no me dio tiempo de hacerme con un ejemplo completo como queria pero publique una solución que creo que es lo que pasaba, no tenias una clase para el modelo, sino que utilizabas la que trae por defecto swing que de por si es editable, prueba y me comentas a ver que tal.. suerte!
Responderhola carlos me pueden ayudar con lo de isCellEditable es que la verda apenas estoi comenzando con java y pues no se donde ponerlo oks gracias
ResponderKe ondha pues kreoo0 que me sirvioo0o0 de muchoo0 el otro ejemplo que publicaste eh ya funcional el iscelleditable o0o0ks
Respondergracias
ejemplo
DefaultTableModel modelo = new DefaultTableModel(){
@Override
public boolean isCellEditable (int fila, int columna) {
if (columna > 4)
return true;
return false;
}
};
De nada, cualquier otra cosa no dudes en preguntar
ResponderHola,
Responderme pueden ayudar lo que pasa que necesito hacer una firma programada en html o en javascript la cual se pueda editar; es decir; que cuando abra el archivo solo me aparezca habilitado el nombre y el correo.. espero haberme explicado bien
espero tu respuesta
Saludos
esteeeeee.... mmmm... no, no entiendo... podrías replantear todo otra vez para entender mejor?
ResponderHola!
ResponderMI problema es este:
Estoy programando en Netbeans, agregué un jTable de los componentes Swing de la Paleta, y en la propiedad Model, deshabilite la opción Editable, pero aún así cuando ejecuto mi programa, aún se pueden modificar los datos de las celdas.
Lleno mi tabla de la siguiente forma:
tengo una clase que se llama "consulta", en la cual tengo este método general que me sirve para llenar cualquier tabla a partir de un Resultset:
public DefaultTableModel Filltabla(ResultSet rss){
DefaultTableModel modelo = new DefaultTableModel();
try{
ResultSetMetaData MDatos = rss.getMetaData();
int ncol = MDatos.getColumnCount();
for (int i = 1; i <= ncol; i++) {
modelo.addColumn(MDatos.getColumnLabel(i));
}
while (rss.next()) {
Object[] row = new Object[ncol];
for (int i = 0; i < ncol; i++) {
row[i] = rss.getObject(i + 1);
}
modelo.addRow(row);
}
}
catch (SQLException ex) {
Logger.getLogger(consulta.class.getName()).log(Level.SEVERE, null, ex);
}
return modelo;
}
y desde mi jFrame, lo mando llamar así:
consulta obj=null;
ResultSet rs=null;
rs = obj.listaEstilos(); //consulta estilos
jTable1.setModel(obj.Filltabla(rs));
quisiera que me ayudaras a implementar tu método para hacer que las celdas no sean editables, gracias!
Primero que nada disculpa la tardanza, no había abierto el correo desde ayer a las 5, me parece bastante bien que utilices un método para llenar la tabla según la consulta que supongo es del tipo SQL, bueno, eso no viene al caso, verás, estas utilizando un "DefaultTableModel" y a este modelo si no se le pasan parámetros es básico.
ResponderDe cualquier forma utiliza el método "isCellEditable" en la declaración del modelo:
jTable no Editable
En esa entrada explico como hacerlo ya que surgen muchas dudas con respecto al tema, si tienes problemas no dudes en consultar.
Gracias por responder!
Responderahora mi método quedo de la siguiente manera:
public DefaultTableModel Filltabla(ResultSet rss){
DefaultTableModel modelo = new DefaultTableModel(){
@Override
public boolean isCellEditable (int fila, int columna) {
if (columna > 4)
return true;
return false;
}
};
try{
ResultSetMetaData MDatos = rss.getMetaData();
int ncol = MDatos.getColumnCount();
for (int i = 1; i <= ncol; i++) {
modelo.addColumn(MDatos.getColumnLabel(i));
}
while (rss.next()) {
Object[] row = new Object[ncol];
for (int i = 0; i < ncol; i++) {
row[i] = rss.getObject(i + 1);
}
modelo.addRow(row);
}
}
catch (SQLException ex) {
Logger.getLogger(consulta.class.getName()).log(Level.SEVERE, null, ex);
}
return modelo;
}
y ya me funcionó!!!
Thanks a lot!
XD
Repito, me parece buenísimo que utilices un resulset en una función para llamarlo en distintas consultas sql... Y no hay problema, cualquier duda planteala que aquí se le da una solución.
ResponderOk, gracias _CarlitoX_
Respondery me gustaría plantear otra duda
tengo una pantalla de login, en la cual tengo dos textfield (para el usuario y el pass) y quiero hacer que hasta que esos 2 textfield contengan algo, el botón se habilite, de otra forma no.
Espero me puedas ayudar con esto también
Coloca una condición en en evento del tipo "onKeyPress" para que cuando el usuario presione una tecla y ese textfield's no estén vacíos se habiliten... dejame publicarte un ejemplo en una nueva entrada
ResponderEDITO: ya he publicado el ejemplo: "LogIn en Java"
estoy intentando deshabilitar ciertas celdas en un jtable pero con el metodo de iscelleditable no he podido. como hago?
Respondersi puedes por favor respondeme a este email... ahernandez@ms2.com.ve
ResponderComo dije anteriormente... puedes probar lo de la siguiente entrada: "JTable no Editable".
ResponderHola Carlitox me parece una genialidad tu blog.. realmente te felicito.
ResponderTengo un problema y no se si puedas darme una mano, mira lo que pasa es que estoy creando un programa en java que realiza una consulta a una base de datos (MySQL) mediante un mouseClicked y exponerlas en forma grafica medante JTable el problema radica en que necesito usar uno de los datos tomados para realizar otra consulta en otra tabla y a traves de otro mouseClicked poder tomar este ultimo valor para modificarlo borrarlo etc... pero al hacer clic en la segunda Jtable se me cambian los valores lo cual es confuso y no se que es lo que esta pasando y como solucionarlo. Espero haberme podido explicar con todo este es el pedazo del codigo al cual me refiero:
personal = bdp.getpersonal();
//Primera Tabla
Object[][] data = new Object[personal.length][3];
for (int pe=0;pe -1) && (columna > -1)){
personal1 = bdp.getPersonalByNumper(
Integer.valueOf((String.valueOf(tablaPersonal.getV alueAt(fila,0)))));
textId.setText(String.valueOf(personal1.getNumper( )));
textId1.setText(String.valueOf(personal1.getNumper ()));
textNombres.setText(personal1.getNombres());
textApellidos.setText(personal1.getApellidos());
System.out.println(modeloTabla.getValueAt(fila,0)) ;
//Segunda tabla
int numper=Integer.parseInt(textId1.getText());
cargofuncion = bdcf.getCargoFuncion(numper);
Object[][] dataC = new Object[cargofuncion.length][3];
for (int pe=0;pe<cargofuncion.length;pe++){
dataC[pe][0]=cargofuncion[pe].getNombreCargo();
dataC[pe][1]=cargofuncion[pe].getDescCargo();
dataC[pe][2]=cargofuncion[pe].getNumper().getNumper();
}
String[] columNamesC = {"Nombre Cargo","Descripcion Cargo"};
modeloTablaCargo= new DefaultTableModel(dataC, columNamesC);
tablaCargo = new JTable(modeloTablaCargo);
tablaCargo.setPreferredScrollableViewportSize(new Dimension(500, 150));
scrollPanelCargo = new JScrollPane(tablaCargo);
int xx=100;
int yy=80;
scrollPanelCargo.setBounds(xx, yy, 1000, 150);
panelCargo.add(scrollPanelCargo);
estado = 3;
alterarEstado();
}
}
});
De antemano muchas gracias por tu tiempo
Hola, bueno, lo primero que me parece es que con esto rellenas los datos, mas no me muestras el evento que manejan dichos datos... he de suponer que "bdp" es una clase y "getpersonal()" es un método, entonces tienes "bdp.getpersonal()" para obtener la lista de tu personal (supongo es para una empresa, nomina o algo así).
ResponderAhora, he de decirte que si utilizas MySQL me gustaria ver como tienes esos datos guardados ya que estas complicando mucho algo muy simple, por ejemplo, tengo en la BD la tabla "persona", los campos:
ID / Nombre / Apellido / C.I / Dirección / Telf
El id es para identificar a cada empleado, en caso de que exista un segundo carlos, por ejemplo. Ahora, lo primero es definir las tablas y modelos para cada una:
Object [] columnas1 = {"ID","Nombre","Apellido","C.I."};
DefaultTableModel modelo1 = new DefaultTableModel(columnas1,0)
{@Override //para que no editar celdas
public boolean isCellEditable (int fila, int columna) {
return false;
}
};
Object [] columnas2 = {"Dirección","Telf"};
DefaultTableModel modelo2 = new DefaultTableModel(columnas2,0)
{@Override //para que no editar celdas
public boolean isCellEditable (int fila, int columna) {
return false;
}
};
Luego relleno la tabla uno automáticamente con todos los nombres:
void Carga(){
String busqueda= "SELECT nombre,apellido,ci FROM empleados";
//aqui cargo los datos y los subo a la tabla1
ResultSet resultado = stat.executeQuery (busqueda);
ResultSetMetaData metaDatos = resultado.getMetaData();
numeroColumnas = metaDatos.getColumnCount();
while (resultado.next()) {
Object [] fila = new Object[numeroColumnas];
for (int i=0;i<numeroColumnas;i++) {
fila[i] = resultado.getObject(i+1);
}
modelo1.addRow(fila);
}
}
Luego al hacer click en cualquier nombre, apellido o CI selecciono el ID de la fila donde hice click y vuelvo a repetir el proceso, solo que esta vez buscando el Telf y Dirección para llenarlos en la segunda tabla:
void CargaClick(){
String busqueda= "SELECT direccion,telf FROM empleados";
//aqui cargo los datos y los subo a la tabla2
ResultSet resultado = stat.executeQuery (busqueda);
ResultSetMetaData metaDatos = resultado.getMetaData();
numeroColumnas = metaDatos.getColumnCount();
while (resultado.next()) {
Object [] fila = new Object[numeroColumnas];
for (int i=0;i<numeroColumnas;i++) {
fila[i] = resultado.getObject(i+1);
}
modelo2.addRow(fila);
}
}
Espero esto pueda ayudarte, también me gustaría que me mostraras el evento click de las tablas y el método donde cargas la consulta SQL para poder ayudarte mejor, saludos!
Hola nuevamente sabes q si me ayuda lo que me acabas de decir pero aun me quedan muchas dudas, como puedeo enviarte de manera mas personal el proyecto que estoy realizando para que puedas entenderme mejor.
ResponderMuchas gracias
Me alegra haberte ayudado por mas poco que fuera, y bueno, en la parte derecha encontraras mi correo, justo donde dice "suscríbete al blog"...
Responderhola me gustaria saver si es posible hacer lo siguiente, los q han trabajdo con vb6.0 recordaran la grilla puede tener n columnas digamos 20 pero solo visualizo digamos unas 5 las demas van apareciendo a medida q muevo el scroll es eso posible hacer en un jtable
Responderhola como estas tengo una pregunta Carlitox lo que pasa es que yo trabajando en netbenas y e creado una tabla tipo (jTable) le e puesto el boton de chulear como ago para crear un boton que cuando selecciones en la tabla el elimine el que an seleccionado porfavor repondeme lo mas rapido grax por su atencion
ResponderHola, ¿como estas?...... Bueno, primero que nada lo ideal seria construirte el modelo, pero como ya tienes la tabla debes setearlo....
ResponderCrea la variable:
DefaultTableModel modelo = new DefaultTableModel();
Busca en tu código "initComponents()", justo debajo de eso colocas:
jTable1.setModel(modelo);
Luego en el evento del botón:
modelo.removeRow(laFila);
Eso es todo, saludos!
men muchas grax por tu atencion mira yo yatengo creado todo el modelo y todo para resumir lo unico que me falta es lo del boton borrar la fila cuando me seleccionan la fila entiendo todo lo que me respondiste pero no entiendo lo que esta en parentesis al final lo de laFila de donde saco eso ? grax por su atencion
ResponderLo de la fila lo tienes con el mouse clicked, que esta explicado mas arriba en el post, es decir...
ResponderDeclara una variable int global:
int fila = 0;
Dale click derecho a tu tabla y agrega el evento MouseClicked, en el pones lo siguiente:
int fila = tabla.rowAtPoint(evt.getPoint());
Ahora en el evento del botón pones:
modelo.removeRow(fila);
muchas grax men lla lo tengo seria mucha molestia si le pido un favor mas el ultimo sera selojuro ;D
Responderloquepasa es que yo estoy guardando en una lista unos datos X y los ago reflejar en el jTable ya tengo los botones de borrar los de agregar pero cuando yo selecciono uno en expecifico para borrar que tenga datos ps borra la fila pero cuando le doy actualizar a la jTable ps aprese denuevo los datos q se supone que e borrado aprese porq los borre temporalmente del jTable pero no de la lista la pregunta es:
cuando seleccione una fila, como ago para borrarla y que por hay derecho se borre tambien los datos de la lista ??? espero que alla sido concreto y claro grax por su atención...
Pues eso depende.... Si los cargas desde una base de datos pues tendras que borrar el registro, si es desde un archivo (ya sea texto plano o no) tendras que borrarlo de ese archivo, todo depende de donde recuperes esos datos.... Tienes 2 opciones:
Responder1. Actualizar el archivo, tabla o cualquiera de estos borrando únicamente el registro que eliminas de la tabla.
2. Borrar todo de la tabla o archivo y guardar de nuevo todos los elementos de la lista, para luego mostrar los datos actualizados.
Te recomiendo que hagas lo primero, si bien lo segundo es mas simple, es menos estético y va contra todo lo que es "el deber ser".... Saludos!
carlitox esta super interesante tu blog me llamo david y mi pregunta es la sgte como programo un campo de progreso...bueno mi idea es la sgte tengo mi tabla de login para usuarios lo que quisiera que haga es cuando los usuarios se logeen todo salga el cuadrito de progreso que ingresando al sistema y luego lo usual bienvenidos al sistema y se desplasa la tabla de menu ya le di muchas vueltas espero me puedas ayudar ahh es netbeans mi correo es panzer_demolition@hotmail.com... y gracias de ante mano
ResponderHola david, lo que necesitas aún no lo he publicado, esta atento al blog que pronto lo publicaré.
ResponderHola Carlitox me llamo Andriy me podrias ayuda a implementar el metodo de (Cel·lda no editable).
ResponderEn este metodo me devuelve un JTable entonses no se como deberia de ir.
Veras lo que quiero es que la tabla este bloqueada por completo, pero hay una pega y es que tengo funcionando un MouseListener que me gustaria que siguese funcionando mientras la JTable no es editable.
public static JTable ListarArticulos (){
DefaultTableModel modelo=new DefaultTableModel();
tecnics objart=new tecnics();
ArrayList lista2=new ArrayList();
lista2=objart.ListaArticulos();
//Titulos de Columnas de la Tabla
modelo.addColumn("Nif");
modelo.addColumn("Cognom i Nom");
modelo.addColumn("Carrer");
modelo.addColumn("Numero");
modelo.addColumn("Escala");
modelo.addColumn("Pis");
modelo.addColumn("Porta");
modelo.addColumn("CP");
modelo.addColumn("Localitat");
modelo.addColumn("Telefon");
modelo.addColumn("E-mail");
modelo.setRowCount(lista2.size());
int i=0;
//Coloca en la tabla los datos de BD
for (tecnics x : lista2)
{
modelo.setValueAt(x.getNif(), i, 0);
modelo.setValueAt(x.getCognomnom(), i, 1);
modelo.setValueAt(x.getCarrer(), i, 2);
modelo.setValueAt(x.getNumero(), i, 3);
modelo.setValueAt(x.getEscala(), i, 4);
modelo.setValueAt(x.getPiso(), i, 5);
modelo.setValueAt(x.getPorta(), i, 6);
modelo.setValueAt(x.getCp(), i, 7);
modelo.setValueAt(x.getLocalitat(), i, 8);
modelo.setValueAt(x.getTelefon(), i, 9);
modelo.setValueAt(x.getEmail(), i,10);
i++;
}
//2 siguentes linias para colocar barra de deslasamiento Horizontal
tabla.setModel(modelo);
tabla.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tabla.doLayout();
tabla.setFont(new Font("Arial",1,12));
tabla.setForeground(Color.darkGray);
tabla.getTableHeader().setFont(newFont("Arial",1,12)) tabla.getTableHeader().setForeground(Color.WHITE); tabla.getTableHeader().setBackground(Color.BLUE);
return tabla;
}
Revisa la entrada http://carlitoxenlaweb.blogspot.com/2010/07/jtable-no-editable.html, de cualquier forma reemplaza esto:
ResponderDefaultTableModel modelo=new DefaultTableModel();
Por esto:
DefaultTableModel modelo = new DefaultTableModel()
{@Override
public boolean isCellEditable (int fila, int columna) {
return false;
}
};
Muchisimas gracias! :) vi tu entrada antes per no me di cuenta que me faltaba el ";" jaja una ultima duda se pueden bloquear las columnas de la table ? Para que la gente no mueva sin querer una columna entra y despues diga "eso no va ahi me lo han cambiado" muchas gracias de nuevo :)
ResponderNo hay de que, y claro que se puede, solo debes obtener el encabezado y deshabilitarlo, para ello haces lo siguiente:
Respondertabla.getTableHeader().setReorderingAllowed(false);
Buaahh muchisimas gracias de verdad :)!!
Respondercomo puedo mostrar un dato al seleccionar en un jtable y mostrar en un jtexfiel urgente necesito ayuda
Respondercomo puedo mostrar un dato al seleccionar en un jtable y mostrar en un jtexfiel urgente necesito ayuda
ResponderLee bien el post, dice claramente... "Obtener el valor donde se hace click.", solo te resta mostrarlo en la caja de texto con "setText()".....
ResponderBuen Blog mi viejo, ahora tengo una inquietud y esta radica en:
ResponderDentro de un JTable ingreso dos datos uno es nombre y el otro cedula. Como puedo hacer para que no se me repita el dato al darle en el botón ingresar?
Postea tu código y veamos como lo haces, a de haber algo extraño por ahi.....
Responderprivate void btningresarActionPerformed(java.awt.event.ActionEvent evt) {
ResponderDefaultTableModel modelo = (DefaultTableModel) jtdatosempleado.getModel();
String nom = String.valueOf(cmbempleado.getSelectedItem());
int index=cmbempleado.getSelectedIndex();
String ced[]=c.getEmpleado1();
/*jtdatosempleado.setValueAt(nom,xxx, 0);
jtdatosempleado.setValueAt(ced[index],xxx, 1);*/
xxx++;
String [] datos ={nom,ced[index]};
modelo.addRow(datos);
}
private void btnaceptarActionPerformed(java.awt.event.ActionEvent evt) {
int n = jtdatosempleado.getRowCount();
if (n == 0) {
JOptionPane.showMessageDialog(null, "No existe ninguna fila en la tabla");
return;
}
String nombre;
String cedula;
String Consec = txtconsec.getText();
String Fecha=txtfecha.getText();
String Solicitud = String.valueOf(cmbsolicitud.getSelectedItem());
String Cantidad = txtcantidad.getText();
String HInicio =String.valueOf(cmbhini.getSelectedItem());
String MInicio =String.valueOf(cmbmini.getSelectedItem());
HInicio=HInicio +":"+ MInicio;
String HFin =String.valueOf(cmbhfin.getSelectedItem());
String MFin =String.valueOf(cmbmfin.getSelectedItem());
HFin=HFin +":"+ MFin;
String Area = String.valueOf(cmbarea.getSelectedItem());
String Desc = txtajustif.getText();
String Solicita = String.valueOf(cmbsolicita.getSelectedItem());
for (int i = 0; i < n; i++) {
nombre = jtdatosempleado.getValueAt(i, 0).toString();
System.out.println(nombre);
cedula = jtdatosempleado.getValueAt(i, 1).toString();
System.out.println(cedula);
//c.IngRefrigerios(Solicitud, Solicitud, Solicitud, Cantidad, HInicio, Solicita, Area, MInicio, Solicita, Area, cedula, Desc, Solicita);
c.IngRefrigerios(Consec,Fecha, Solicitud, Cantidad, HInicio, HFin, Area, nombre, cedula, Desc, Solicita);
}
JOptionPane.showMessageDialog(null, "Los Datos fueron Agregados Correctamente");
String consec = c.getvalidrefri();
txtconsec.setText(consec);
limpiarTabla(jtdatosempleado);
}
private void btncancelarActionPerformed(java.awt.event.ActionEvent evt) {
int consec1 = Integer.parseInt(txtconsec.getText());
consec1=consec1-1;
c.getactvalidrefri(consec1);
System.exit(0);
}
El btnaceptar los ingresa al jtable (nombre del empleado y cedula) y el btningresar los agrega a la bd. La verdad no se como puedo realizar esa parte para que cuando seleccione un empleado y lo ingrese a la tb no lo pueda ingresar nuevamente. Me colaboras.....
Carlos buen día. Me puedes brindar una asesoria???. Quisiera tener en un jtable mas de 100 filas pero solo tiene predeterminadas 100. Se puede ampliar a 500 o 1000 filas por decir algo??? Y si es asi como lo haría. Gracias de antemano
ResponderLo que tienes es un problema de validación, tienes que comparar lo que envias con lo que tienes, entonces lo que debes hacer es crear un método que valide el cliente que quieres ingresar para ver si ya existe en la BD, y que el método devuelva "true" o "false" según el resultado.....
ResponderPara la conexión puedes leer esto:
http://carlitoxenlaweb.blogspot.com/2008/12/conectando-java-con-mysql.html
http://carlitoxenlaweb.blogspot.com/2011/09/consultas-sql-dinamicas-en-java.html
Otra buena practica seria depurar ese código, por ejemplo, la declaración de todos esos Strings, podrías cambiarlo a:
String nombre,
cedula,
Consec = txtconsec.getText(),
..... ;
Fijate que las variables las separas con "comas" y la última la terminas en "punto y coma".... Saludos!!
Lo ideal es que limites y muestres las filas con botones de siguiente y anterior..... Atento a la nueva entrada que explicare como hacerlo, gracias por preguntar...... Saludos!!
ResponderCarlos tal vez no me he hecho entender. La conexión con la base de datos funciona e ingresa los datos correctamente, adicional a esto dentro de la base de datos en la tabla donde se ingresan los registros existe un unique que no permite ingresar más de una vez una ced y nomb perteneciente al consecutivo. Eso funciona correctamente. Lo que deseo es que el jtable de la interfaz no existan datos repetidos es decir si del cmb selecciono Carlos Martinez con ced 123456 y le doy ingresar para que lo muestre en el jtable, ya no pueda volver a ingresarlo en ese jtable con ese mismo consecutivo. Me hago entender?
ResponderExacto, es como te acabo de decir, necesitas validar que el campo ya existe a nivel de programa, no a nivel de BD, o manejar una excepción que le diga al programa que si hay un error por duplicidad en la BD no agregue el registro a la tabla.....
ResponderSi tu cargas los registros de la tabla por SQL entonces necesitas esa validación, que si el registro existe no lo agregue (a nivel de programa), y si los agregas mediante otro tipo de dato debes leer los registros de la tabla y ver si ya esta para no repetirlo, en ningún momento haz puesto esta validación al momento de agregar la fila..... Me entiendes?
Hola me podrias ayudar con un ejercicio tipo para poder agregar datos a una tabla sin que se repitan, por ejemplo si existe un DNI de una persona solo se agregue una vez. Porfavor soy algo nuevo en Java Netbeans. Gracias
ResponderSi es así debes almacenar cada valor en una lista o array, como gustes, luego, cada vez que ingreses el valor, debes recorrer esos datos almacenados uno a uno y revisar que no exista, si no existe entonces lo agregas, sino lo omites... Busca aquí en el blog las entradas de listas, arrays y tablas, de esta forma tendrás una idea mas general... Saludos!!
ResponderEstoy trabajando con un proyecto para crear horarios y estoy utilizando el JTable, pero necesito validar que si por ejemplo, un curso se está dando en el aula 13, cuando quiera ingresar un nueva informacion y que digite que quiero dar ese curso en el aula 13 no me lo permita porque esta ocupado, que me muestre un mensaje.. Gracias, necesito esa ayuda
ResponderNecesitas conectarte a MySQL antes de guardar el campo, utiliza el buscador ubicado en la esquina superior derecha del blog, te oriento un poco...
Responder1. Crea una función donde se valide la data ingresada
2. Valida si el campo donde se esta ingresado no esta ocupado (aula)
3. De estar vacío procede a llenar esa info y actualiza la tabla
Como verás, necesitas solo una función donde se valide la data, repito, utiliza el buscador que la info esta.....
Muy buen post.
ResponderEstoy teniendo un problema y quería saber si me podés ayudar.
Tengo un jTable con 3 columnas: codigo,descripcion,cantidad.
La idea es que cada vez que carga el código, lo busca en la BD y trae la descripción y me pone cantidad en 1.
Hasta ahi bien.
El problema surge cuando vuelvo a ingresar el mismo codigo. Me debería incrementar la cantidad en el producto con ese codigo pero sin agregar una nueva fila(es decir, como si agrupara).
Me podrás ayudar con eso?? por favor...
Muchisimas gracias.
Claro, veamos tu código...... Se me ocurre que si encuentras la coincidencia omitas el insert de la fila
Responderhola, alguien me puede ayuar porfavor??? tengo q Hacer un programa donde se llene manualmente un ArrayList con nombres y sueldos al pulsar un botón. Luego en enviar este ArrayList a un método que colocara esta data en un JTable, mostrando así los datos en la pantalla.
ResponderHola, pues en el blog hay muchos ejemplos de lo que dices, lo del arreglo puedes verlo aquí: http://carlitoxenlaweb.blogspot.com/2008/08/arreglos-parte-4.html
ResponderLo del ArrayList es cuestión de modificar un poco el código, por ejemplo
String nombres[]=new String [n] >> List nombres = new ArrayList() >> ArrayList nombres = new ArrayList()
Y lo de mostrarlo en una tabla aquí esta como llenarlo (en esta entrada), si quieres una paginación entonces aquí también lo tienes:
http://carlitoxenlaweb.blogspot.com/2013/06/jtable-con-paginacion.html
Si tienes problemas implementando el código puedes publicar un comentario con el mismo para darle la solución... Saludos!
amigo que codigo puedo usar en netbeans para que cuando agrego un numero de DNI no ingrese uno el mismo, que ya esta en el campo.. osea en poca palabra para que no m duplique el DNI
ResponderPues solo tienes que buscar la coincidencia dentro de la tabla y omitir el registro si hay duplicidad....
Responderhola,
Respondermi botón listar me repite los datos registrados y solo quiero una sola vez y al presionar listar ya no me liste lo mismo
hola me podrias ayudar con mi codigo es que estoy haciendo una aplicacion socket en nethbeans tengo dos JTable al momento de eliminar un registro en la primera table del cliente y si se elimina, el problema esta en la tabla del servidor que se duplican los datos en ves de eliminarlo...
ResponderPara ello tendrías que recorrer la tabla y si el registro existe omitirlo, en los comentarios un usuario pregunto sobre el mismo problema... Saludos!!
ResponderPublica algo del código para poder darte una mano, pero de momentos suena a que el problema es que del lado del servidor no se esta ejecutando la función correspondiente para eliminar el registro.
ResponderLamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.
Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión