Mostrando entradas con la etiqueta jtable. Mostrar todas las entradas
Mostrando entradas con la etiqueta jtable. Mostrar todas las entradas

martes, 28 de mayo de 2024

modelo JTable con un Arraylist

 Siempre vi que habían ventajas en usar un ArrayList como modelo de un JTable y heredando de un AbstractTableModel, lo pongo aquí para cuando alguien lo necesite hacer de esta forma.

package modelo;


import java.util.ArrayList;


import javax.swing.table.AbstractTableModel;

public class ModeloTabla extends AbstractTableModel {

private static final long serialVersionUID = 1L;

private ArrayList<Object[]> data;

private String[] columnNames;


public ModeloTabla(ArrayList<Object[]> data, String[] columnNames) {

        this.data = data;

        this.columnNames = columnNames;

    }

    

public ModeloTabla(String[] columnNames) {

    this.data = new ArrayList<Object[]>();

    this.columnNames = columnNames;

    }

    

public ArrayList<Object[]> getdata(){

    return this.data;

    }


@Override

public int getRowCount() {

        return data.size();

    }


@Override

public int getColumnCount() {

        return columnNames.length;

    }


@Override

public String getColumnName(int columnIndex) {

        return columnNames[columnIndex];

    }

    

@Override

public Class<?> getColumnClass(int columnIndex){

        return getValueAt(0,columnIndex).getClass();

    }


@Override

public Object getValueAt(int rowIndex, int columnIndex) {

        return data.get(rowIndex)[columnIndex];

    }


@Override

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

        data.get(rowIndex)[columnIndex] = aValue;

        fireTableDataChanged();

    }


public void addRow(Object[] rowData) {

        int rowIndex = data.size();         

        data.add(rowData);

        fireTableRowsInserted(rowIndex, rowIndex);

    }

public void removeRow(int rowIndex) {

    data.remove(rowIndex);

    fireTableRowsDeleted(rowIndex, rowIndex);

    }


}


martes, 19 de diciembre de 2023

Aumentar el alto de las celdas en JTable y Encabezado en Java

 El otro día aumenté el tamaño de letra de una JTable y el Header (encabezado de la tabla) pero la altura de ambas quedó muy ajustado y así se puede aumentar el alto de las celdas.

 

//crear tabla y características modeloTabla es el modelo que le pongamos


          tabla = new JTable(modeloTabla);

//obtener encabezado

          encabezado = tabla.getTableHeader();  

/*aquí aumentamos la altura del encabezado el 0 es el ancho y el 35 el alto

yo lo usé así el ancho le da lo que necesite y el alto está a 35 */

          encabezado.setPreferredSize(new java.awt.Dimension(0,35));

//Luego aumento el alto de las celdas de la tabla

            tablaProcesos.setRowHeight(30);

miércoles, 6 de diciembre de 2023

Aumentar tamaño de fuente de encabezado JTable Java

Necesitaba aumentar el tamaño de la letra fuente del encabezado de una JTable en Java.

Me costó encontrar cómo hacerlo pero la forma más fácil fue la siguiente:

JTableHeader objetoencabezado; 

Creamos el tipo y tamaño de letra

Font fuente = new Font("Dialog",Font.PLAIN,16);

Luego se la ponemos al objetoencabezado

objetoencabezado.setFont(fuente);

¡Y listo! Sencillo verdad.


jueves, 23 de diciembre de 2021

Cambiar fondo de la celda con el foco en JTable

 

Cómo al seleccionar una fila en una jtable quería que la celda que tuviera el 

foco fuera de un color diferente para que la persona supiera en dónde estaba. 

Entonces la mejor forma es por medio DefaultTableCellRenderer.

Debemos crear una clase que herede de DefaultTableCellRenderer como sigue:

 

en este caso le puse una letra c es solo para poder reusarla en otra jtable

pero se puede quitar. 

 

/*
* Clase para poner la celda que se esta editando en color blanco u otro
*/
package vista;

import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

/**
*
* @author miusuario
*/
public class ColorCeldaEditando extends DefaultTableCellRenderer {
char quePanelEditar;
Color colorDeCeldaAEditar;
public ColorCeldaEditando(char panelEditando){
//ponemos el panel editando para que ponga el color
if('c' == panelEditando){
colorDeCeldaAEditar = new Color(176,196,222);
}else{
colorDeCeldaAEditar = new Color(176,196,222);
}
}
@Override
public Component getTableCellRendererComponent(JTable table,

Object value, boolean Selected, boolean hasFocus, int row, int col){
 

        super.getTableCellRendererComponent(table, value, Selected, 

hasFocus, row, col);
 

        if(hasFocus){
setBackground(colorDeCeldaAEditar);
}
return this;
}

 

Luego para la llamada seria:

 

TablaClientes.setSelectionBackground(new Color(65,105,225));

//aqui creamos la clase que hereda de DefaultTableCellRenderer

ColorCeldaEditando ColoreaEnFoco;

//le mando una c solo para decir que es la tabla de clientes y escoger alumnos etc.
ColoreaEnFoco = new ColorCeldaEditando('c');

/*ahora colocamos la clase en la TablaClientes mandandole un Object.class y la

 recien creada clase que le cambiará el color si tiene el foco */
TablaClientes.setDefaultRenderer(Object.class,ColoreaEnFoco); 

 

¡y con eso queda lista!. 

miércoles, 15 de enero de 2020

Editar y no Editar columnas en java jtable

Había buscando en internet bastante pero no encontraba la respuesta en la JTable de java que tenía quería que se pudiera editar 3 columnas y una no pero no encontraba como hacerlo así que decidí hacer este post por si a alguien le sirve.
En la clase que debemos trabajar es el la clase DefaultTableModel para que funcioné así lo implemente.

modelo= new DefaultTableModel(){
            @Override
            public boolean isCellEditable(int row,int column){
                return !(column==0);
            }
        };


cuando creamos el modelo sobreescribimos el método isCellEditable(int row,int column) que para entenderlo mejor es un método de la clase DefaultTableModel que lo que hace es cada vez que debe escribir sobre una celda lo llama y verifica el estado regresando verdadero si se puede editar o falso si no se puede editar.
Donde row y column es en la posición que se encuentra el foco pues lo que debemos hacer es que de falso en la posición que no queremos que se pueda editar o lo contrario.
Yo necesitaba que la columna 0 no se pudiera editar y las otras si, entonces le puse que cuando estuviera el la comuna cero diera falso y allí me funcionó con la condición que podemos ver arriba con column==0 da verdadero cuando esta en la comuna cero pero lo que quiero es que de falso entonces lo negué.