JTable

pedrolo
12 de Agosto del 2005
Hola!
Como puedo crear una JTable pero que inicialmente no contenga datos, pero que al visualizarla aparezcan lo nombres de las columnas.
Gracias.

ChinoKao
12 de Agosto del 2005
public Vector devolverColumnas(){
Vector miVector = new Vector();
miVector.add("REFERENCIA");
miVector.add("DESCRIPCION");
miVector.add("UNIDADES");
miVector.add("PRECIO U.");
miVector.add("TOTAL");
return miVector;
}

public Vector devolverFilas(){
Vector filas = new Vector();
return filas;
}

Ahora para crear la tabla...

Vector columnas = devolverColumnas();
Vector filas = devolverFilas();
jTable1 = new JTable(new MiModeloTabla(columnas, filas));
jTable1.setBackground(new Color(221, 233, 215));
jTable1.setAutoCreateColumnsFromModel(false);
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

TableColumn columna = null;
jTable1.setCellSelectionEnabled(true);
jTable1.addKeyListener(controlador);
jScrollPane1.setViewportView(jTable1);

ahora paso a ponerte la clase MiModeloTabla:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;

/**
*
* @author casa
*/
public class MiModeloTabla extends AbstractTableModel{

private Vector columnNames = new Vector();

private Vector data = new Vector();

public MiModeloTabla(Vector columnas, Vector datos){
columnNames = (Vector)columnas.clone();
data = (Vector)datos.clone();
}

public int getColumnCount() {
return columnNames.size();
}

public int getRowCount() {
return data.size();
}

public String getColumnName(int col) {
return (String)columnNames.elementAt(col);
}

public Object getValueAt(int row, int col) {
return ((Vector)data.elementAt(row)).elementAt(col);
}

/*
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box.
*/
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

/*
* Don't need to implement this method unless your table's
* editable.
*/
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col==2){
return true;
} else {
return false;
}
}

/*
* Don't need to implement this method unless your table's
* data can change.
*/
public void setValueAt(Object value, int row, int col) {
String valor = (String)value;
boolean falso = false;
if (valor.length()>0){
for (int i=0; i<valor.length();i++){
if (!Character.isDigit(valor.charAt(0))){
falso = true;
}
}
if (!falso){
((Vector)data.elementAt(row)).setElementAt(value, col);
}
}
}


public void actualizar(Vector columnas, Vector datos){
columnNames = (Vector)columnas.clone();
data = (Vector)datos.clone();
fireTableDataChanged();
}


Bueno a ver si te sirve; Un saludo

chuidiang
12 de Agosto del 2005
Hola:

Crea un DefaultTableModel, dile las columnas, pero no metas datos.
Luego crea el JTable pasándole el DefaultTableModel en el constructor.
Cuando quieras añadir, borrar o modificar datos, hazlo en el DefaultTableModel.

Se bueno.