Cómo editar la posición de las tablas en NetBeans con JTable

Para editar la posición de una tabla JTable en NetBeans debes trabajar principalmente con el diseñador visual, el administrador de distribución del formulario y las propiedades del componente. En NetBeans, el componente Table se coloca automáticamente dentro de un JScrollPane, por lo que normalmente debes mover o dimensionar el JScrollPane que contiene la tabla.

JTable es un componente visual de java que nos permite dibujar una tabla, de forma que en cada fila/columna de la tabla podamos poner el dato que queramos; un nombre, un apellido, una edad, un número, etc, etc. Si busca mostrar datos en formato tabular, debería considerar usar la clase JTable en el paquete javax.swing.

Qué componente debes mover en NetBeans

Cuando arrastras un componente Table desde la paleta de Swing a un JFrame, NetBeans lo coloca automáticamente dentro de un JScrollPane (necesario para que aparezcan las barras de desplazamiento). Por esta razón, la posición visible de la tabla depende habitualmente de la posición y el tamaño del JScrollPane.

El contenedor principal de cualquier aplicación Swing es el JFrame. Piensa en él como el lienzo donde colocarás todos los demás componentes. En tu proyecto, haz clic derecho en el paquete de fuentes y selecciona New > JFrame Form.

Editar la posición desde el diseñador visual

  1. Abre en NetBeans el formulario JFrame que contiene la tabla.

  2. Selecciona la tabla en la vista Design.

  3. Si la tabla está dentro de un JScrollPane, selecciona el contenedor de desplazamiento en la vista Design o en la ventana Navigator.

  4. Arrastra el JScrollPane hasta la posición deseada dentro del JFrame.

  5. Cambia sus dimensiones utilizando los controladores visuales que aparecen alrededor del componente.

  6. Utiliza la ventana de Properties para cambiar el texto, el color o la fuente de tus componentes.

NetBeans incluye el Matisse GUI Builder, una herramienta de “arrastrar y soltar” que facilita enormemente el diseño visual. Esto te permite diseñar ventanas de forma visual sin escribir cada línea de código de la interfaz, gestionar eventos y previsualizar cómo se verá tu software en tiempo real.

JTable dentro de JScrollPane en NetBeans

Posición, tamaño y anclaje de la tabla

La ubicación exacta del componente depende del administrador de distribución utilizado por el formulario. NetBeans puede generar automáticamente las restricciones necesarias cuando mueves o redimensionas el JScrollPane en la vista Design.

Si el componente se desplaza de forma inesperada o cambia de tamaño al ejecutar el programa, revisa las propiedades de diseño y las relaciones de anclaje del componente. El problema normalmente no está en JTable, sino en el contenedor que administra su posición.

La clase JTable es una herramienta versátil que te permite crear una tabla con filas y columnas y personalizarla según tus necesidades. Al utilizar la clase JTable, puede crear tablas con diferentes alturas de fila, anchos de columna, fuentes, colores y más.

Modificar la posición mediante propiedades

Selecciona el JScrollPane en la vista Design y revisa la ventana Properties. Las propiedades relacionadas con el diseño permiten establecer restricciones, anclajes, separación respecto a otros componentes y comportamiento al cambiar el tamaño de la ventana.

Para modificar la posición de una tabla, no es necesario cambiar el modelo de datos. El modelo controla la información que se muestra, mientras que el contenedor y el administrador de distribución controlan la ubicación visual del componente.

Utilizar la ventana Navigator

Cuando varios componentes se superponen o la tabla resulta difícil de seleccionar, utiliza la ventana Navigator de NetBeans. Allí podrás identificar la jerarquía del formulario y localizar el JScrollPane que contiene el JTable.

La estructura habitual es un JFrame que contiene un JScrollPane, y dentro de ese JScrollPane se encuentra el JTable. Seleccionar el contenedor correcto permite modificar la posición sin alterar accidentalmente el modelo o las propiedades internas de la tabla.

Editar la posición con código Java

También es posible establecer la posición y el tamaño mediante código, aunque esta opción depende del administrador de distribución del formulario. En el ejemplo siguiente se utiliza un posicionamiento absoluto:

frame.setLayout(null);

sp.setBounds(30, 40, 400, 200);

En este caso, el JScrollPane se ubica a partir de una coordenada horizontal y una coordenada vertical, y se le asignan un ancho y un alto. La tabla continúa dentro del JScrollPane y conserva sus barras de desplazamiento.

El uso de posiciones absolutas puede resultar sencillo para ejemplos pequeños, pero obliga a controlar manualmente la ubicación de todos los componentes. En interfaces que deben adaptarse a distintos tamaños de ventana, es preferible utilizar un administrador de distribución.

Ejemplo básico con JTable y JScrollPane

Este ejemplo muestra cómo crear una tabla simple con datos de estudiantes, mostrando su ID, nombre y calificación.

import javax.swing.*;

public class EjemploBasicoJTable {

JFrame frame;

EjemploBasicoJTable() {

frame = new JFrame("Ejemplo Básico de JTable");

String data[][] = {

{"001", "Carlos", "85"},

{"002", "Marta", "90"},

{"003", "Luis", "78"},

{"004", "Ana", "88"}};

String columnas[] = {"ID", "Nombre", "Calificación"};

JTable tabla = new JTable(data, columnas);

JScrollPane sp = new JScrollPane(tabla);

frame.add(sp);

frame.setSize(400, 300);

frame.setVisible(true);

}

public static void main(String[] args) {

new EjemploBasicoJTable();

}

}

La tabla es sencilla, sin funcionalidades adicionales, pero se presenta dentro de un JScrollPane para facilitar la visualización.

Organizar una tabla con el administrador de distribución

El administrador de distribución determina cómo se calcula la posición y el tamaño de cada componente. Si se utiliza un diseño automático, arrastrar la tabla puede modificar las restricciones del formulario en lugar de fijar una coordenada absoluta.

El administrador de distribución resulta especialmente importante cuando el JFrame cambia de tamaño. Una tabla colocada dentro de un JScrollPane puede ocupar una zona determinada del formulario y ampliar su área disponible junto con la ventana.

Cuando se agregan otros componentes, como botones, campos de texto o etiquetas, el diseño debe definir cómo se relacionan entre sí. Swing es la librería estándar de Java que nos permite crear ventanas, botones, tablas y formularios de forma robusta.

Tabla ubicada en el centro de la ventana

Un caso habitual consiste en colocar la tabla en la zona central del formulario y ubicar los controles en otra zona. En el ejemplo de una tabla dinámica, el panel de botones se agrega en la parte inferior:

frame.add(panel, "South");

El JScrollPane se agrega al formulario y el panel se coloca en la zona inferior. Esta distribución permite que la tabla ocupe el área principal y que los controles permanezcan separados.

El código de una tabla dinámica utiliza un modelo independiente para añadir y eliminar filas:

DefaultTableModel modelo;

modelo = new DefaultTableModel();

modelo.addColumn("ID");

modelo.addColumn("Nombre");

modelo.addColumn("Edad");

tabla = new JTable(modelo);

JScrollPane sp = new JScrollPane(tabla);

frame.add(sp);

Relación entre la posición y el modelo de la tabla

A diferencia de otros componentes, el JTable no guarda los datos directamente. Utiliza un “Modelo” (usualmente el DefaultTableModel). Piensa en la tabla como el marco de un cuadro y en el modelo como el lienzo donde pintas los datos.

Un JTable es un componente visual de java que nos permite dibujar una tabla, de forma que en cada fila/columna de la tabla podamos poner el dato que queramos; un nombre, un apellido, una edad, un número, etc, etc. Como muchos componentes de java, se ha seguido una separación modelo-vista. La vista es el componente visual que vemos en pantalla, el modelo es una clase que contiene los datos que luego se verán en pantalla.

La clase Jtable controla como se presentan los datos, siendo el TableModel quien controla los datos sí mismos. para crear una Jtable habrá pues que crear un TableModel antes, normalmente.

Por lo tanto, cambiar la cantidad de filas, los nombres de las columnas o los valores de las celdas no modifica por sí mismo la posición de la tabla. Para cambiar la posición debes modificar el contenedor o las restricciones de diseño.

Configurar la tabla desde Table Contents

Para configurar el contenido inicial de una tabla en NetBeans, haz clic derecho en la tabla > Table Contents. Aquí puedes definir los títulos de las columnas (ID, Nombre, Precio, etc.).

La propiedad Model permite definir el número de columnas y filas del objeto como también las expresiones que irán en las columnas. La propiedad setModel() asigna el modelo de datos al objeto JTable.

La posición del componente y el contenido de Table Contents son aspectos diferentes: Table Contents define la estructura y los datos iniciales, mientras que el diseñador visual define la ubicación del componente dentro del formulario.

Usar un modelo personalizado en una tabla creada gráficamente

Al utilizar NetBeans y colocar algún JTable en la interfaz gráfica de usuario suele ser un problema el poder agregar filas a medida que se van necesitando. Esto se debe a que los JTable no tienen un método para controlar la creación y eliminación de sus filas.

La solución más sencilla (y la peor) es asignar por medio del editor de NetBeans una cantidad “estimada” de filas para la tabla. Si llegan a ser demasiadas, el uso de memoria del programa se vuelve exagerado y hay que modificar los parámetros de la JVM para iniciar el programa con la consecuente pérdida de rendimiento.

Una solución muchísimo mejor que también es fácil de implementar es declarar el modelo que va a utilizar la tabla como cualquier otro atributo de la clase (para poder ser utilizado con un JTable agregado gráficamente).

private DefaultTableModel modeloTabla;

Luego este modelo se debe instanciar e inicializar (en el constructor). Pero esto tiene que ser antes de la llamada al método initComponents() que genera NetBeans. De lo contrario este método intentará asignar un modelo no instanciado al JTable, provocando un IllegalArgumentException.

modeloTabla = new DefaultTableModel();

Lo que sigue es asociar este modelo al JTable agregado gráficamente. Para hacer esto se selecciona el JTable, y en sus propiedades se busca “model”. En la ventana que aparece al presionar el botón para editar la propiedad se selecciona “Custom code” en el combo box y en el campo de texto simplemente se coloca el nombre del objeto modelo definido en el código.

Después sólo es cuestión de agregar, eliminar o incluso mover las filas cuando sea necesario, directamente en el modelo. Los cambios se reflejan instantáneamente en el JTable.

Agregar, eliminar y mover filas

Para agregar una fila, el parámetro es un vector con los valores de las columnas:

modeloTabla.addRow(Object[] rowData);

Para eliminar una fila, el parámetro es el índice de la fila a eliminar:

modeloTabla.removeRow(int row);

Para eliminar todas las filas:

modeloTabla.getDataVector().clear();

Para mover una o varias filas, los primeros dos parámetros seleccionan la(s) fila(s) que se va(n) a mover y el tercero indica la posición hacia donde se va a mover dicha selección:

modeloTabla.moveRow(int start, int end, int to);

Los jTable son elementos dinámicos y prácticos para el desarrollo de algunos proyectos, por lo que hoy les muestro cómo agregar filas a un jTable, entre otras cosas interesantes y muy útiles que debemos saber.

Para agregar una fila, se debe colocar lo siguiente:

modelo.addRow(new Object[]{"","","",""});

Entre las comillas se puede colocar los valores que queremos que aparezca automáticamente en las columnas de la Tabla.

Normalmente es la última fila, para lo cual utilizamos la siguiente instrucción:

modelo.removeRow(modelo.getRowCount()-1);

El método getRowCount devuelve la cantidad de filas que hay en la tabla. Al restarle 1, se le indica al programa que debe eliminar la última de las filas.

Editar la posición y modificar el contenido sin conflictos

Las filas se enumeran a partir del 0, así como las columnas. La primera casilla de la tabla se nombra como la casilla 0,0, es decir, 0 fila y 0 columna.

Este índice se utiliza para acceder a los datos y para definir qué fila se elimina o se mueve. No debe confundirse el índice de fila con la posición visual del JScrollPane dentro del JFrame.

Jtable tiene una característica muy llamativa, este permite que el programador pueda decirdir que se edita y que no, sin embargo si el programador dentro de su programa o de su TABLEMODEL no tiene determinado este aspecto, Jtable automáticamente hace editable las celdas dentro de la tabla.

El modelo también puede controlar qué columnas son editables. En el siguiente ejemplo, la columna “Total” no es editable:

DefaultTableModel modelo = new DefaultTableModel(data, columnas) {

@Override

public boolean isCellEditable(int row, int column) {

return column != 4;

}

};

Esta configuración afecta a la edición de las celdas, pero no cambia la posición de la tabla dentro del formulario.

Ajustar el ancho de las columnas

La posición del JTable dentro del formulario y el ancho de sus columnas son configuraciones distintas. La ubicación se controla mediante el JScrollPane y el diseño del JFrame, mientras que el ancho de cada columna se controla mediante el TableColumnModel.

La clase JTable permite personalizar diferentes alturas de fila, anchos de columna, fuentes, colores y más. También puede agregar imágenes, íconos y botones a las celdas de la tabla, e incluso implementar procesadores y editores de celdas personalizados.

Cuando una columna debe ocultarse, se puede establecer su ancho máximo y mínimo en cero:

jTable1.getColumnModel().getColumn(0).setMaxWidth(0);

jTable1.getColumnModel().getColumn(0).setMinWidth(0);

jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(0);

jTable1.getTableHeader().getColumnModel().getColumn(0).setMinWidth(0);

Estas instrucciones modifican la presentación de una columna, pero no trasladan la tabla ni el JScrollPane.

Problemas frecuentes al cambiar la posición

La tabla no se mueve

Si al arrastrar JTable no cambia su posición, selecciona el JScrollPane que lo contiene. NetBeans coloca automáticamente la tabla dentro de ese contenedor, y las restricciones visuales pertenecen normalmente al JScrollPane.

La tabla ocupa todo el formulario

Revisa las restricciones del administrador de distribución y el tamaño del JScrollPane. El área visible de JTable está limitada por el viewport del JScrollPane.

La posición cambia al ejecutar el programa

La ubicación puede cambiar si el formulario utiliza un administrador de distribución que recalcula el tamaño de los componentes. En ese caso, ajusta las restricciones del componente o utiliza un diseño coherente con la distribución del resto de los controles.

El código generado vuelve a sobrescribir los cambios

NetBeans genera el método initComponents() para construir la interfaz. El modelo personalizado debe instanciarse antes de la llamada a initComponents(), mientras que el código adicional de comportamiento debe colocarse en zonas que no sean modificadas por el editor visual.

Tabla ubicada junto a botones y campos

En una interfaz de gestión es común colocar un JTable en el centro, un panel de edición en la parte superior y botones para las operaciones en la parte inferior. El usuario puede seleccionar una fila de la tabla y utilizar los controles asociados.

Este ejemplo permite agregar y eliminar filas de una tabla de manera dinámica:

JPanel panel = new JPanel();

JTextField idField = new JTextField(5);

JTextField nombreField = new JTextField(10);

JTextField edadField = new JTextField(5);

JButton btnAgregar = new JButton("Agregar");

JButton btnEliminar = new JButton("Eliminar");

panel.add(new JLabel("ID:"));

panel.add(idField);

panel.add(new JLabel("Nombre:"));

panel.add(nombreField);

panel.add(new JLabel("Edad:"));

panel.add(edadField);

panel.add(btnAgregar);

panel.add(btnEliminar);

frame.add(panel, "South");

El usuario puede agregar filas a la tabla con los datos introducidos en los campos de texto. También puede eliminar filas seleccionadas haciendo clic en “Eliminar”.

Seleccionar una fila y trabajar con su posición

Este ejemplo añade funcionalidad para capturar los datos de la fila seleccionada utilizando un ListSelectionListener. La selección se muestra en un JLabel.

ListSelectionModel seleccion = tabla.getSelectionModel();

seleccion.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

seleccion.addListSelectionListener(new ListSelectionListener() {

public void valueChanged(ListSelectionEvent e) {

if (!e.getValueIsAdjusting()) {

int filaSeleccionada = tabla.getSelectedRow();

if (filaSeleccionada != -1) {

String producto = (String) tabla.getValueAt(filaSeleccionada, 1);

String precio = (String) tabla.getValueAt(filaSeleccionada, 2);

etiqueta.setText("Producto: " + producto + ", Precio: $" + precio);

}

}

}

});

En este ejemplo, el usuario puede seleccionar una fila de la tabla, y los datos de la fila seleccionada (producto y precio) se muestran en un JLabel.

Editar la tabla con datos de una base de datos

Los modelos de tabla también permiten cargar información procedente de una base de datos. El objeto JTable muestra los datos, mientras que DefaultTableModel administra las filas y las columnas.

dtmEjemplo = new DefaultTableModel(null,getColumnas());

setFilas();

tblEjemplo.setModel(dtmEjemplo);

scpEjemplo.setViewportView(tblEjemplo);

En este ejemplo, el JScrollPane mantiene el área visible y el modelo recibe las filas obtenidas desde la consulta.

private String[] getColumnas() {

String columna[]=new String[]{"Columna1","Columna2","Columna3"};

return columna;

}

private void setFilas() {

Object datos[]=new Object[3];

while (crs.next()) {

for (int i = 0; i < 3; i++) {

datos[i] = crs.getObject(i + 1);

}

dtmEjemplo.addRow(datos);

}

La carga o modificación de los datos no debe utilizarse para solucionar problemas de ubicación. Si la tabla aparece en un lugar incorrecto, revisa primero el JScrollPane y las restricciones de diseño.

Filtrar datos sin alterar la posición

La clase JTable proporciona varios métodos para ordenar y filtrar los datos y manejar las interacciones del usuario, como la selección, edición y cambio de tamaño.

El filtrado se puede implementar mediante TableRowSorter:

TableRowSorter<TableModel> sorter;

sorter = new TableRowSorter<>(modelo);

tabla.setRowSorter(sorter);

El filtro cambia las filas visibles, pero no cambia la posición del JTable ni el tamaño del JScrollPane.

if (texto.trim().length() == 0) {

sorter.setRowFilter(null);

} else {

sorter.setRowFilter(RowFilter.regexFilter("(?i)" + texto));

}

Recomendaciones para una interfaz estable

  • Selecciona el JScrollPane cuando necesites mover la tabla dentro del JFrame.

  • Utiliza la vista Navigator cuando la tabla esté superpuesta por otros componentes.

  • Usa Table Contents para definir columnas y datos iniciales.

  • Utiliza DefaultTableModel para agregar, eliminar o mover filas.

  • Inicializa el modelo personalizado antes de la llamada a initComponents().

  • Revisa el administrador de distribución si la posición cambia al ejecutar la aplicación.

  • Utiliza posiciones absolutas únicamente cuando controles manualmente el tamaño y la ubicación de todos los componentes.

  • Mantén el JTable dentro de un JScrollPane para facilitar la visualización y el desplazamiento.

JTable es una herramienta muy flexible para mostrar datos en Java Swing. Con ejemplos como tablas simples, selección de celdas, filtrado y la adición/eliminación de filas, puedes adaptar JTable a diversas necesidades en aplicaciones gráficas.

tags: #editar #posicion #tablas #netbeans