Java JTable: cómo representar las celdas de la columna izquierda para fines de encabezado de fila simple

Mi objetivo es crear una JTable y renderizar solo las celdas de la columna del extremo izquierdo, con el objetivo de crear encabezados de fila para la tabla.

Todos los ejemplos de tablas de filas que he encontrado en línea parecen complicados o no se ajustan a mis propósitos, por lo que me pregunto si existe una forma simple de crear encabezados de fila JTable al representar solo las celdas de la columna izquierda.

A continuación tengo el código de una tabla simple con 2 columnas y dos filas. ¿Es posible que alguien pueda modificar esto, o explicar en términos simples, cómo podría hacer para representar la columna del extremo izquierdo para fines de encabezado de fila?

Gracias.

import javax.swing.*;
import java.awt.*;
import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.util.*;
public class GUITable extends JFrame{public GUITable(){


init();
  }

  public final void init(){
    String[] columnNames = {"", "Gross Weight"};

  Object[][] data = {
  {"", new Integer(100)},};

  final JTable table = new JTable(data, columnNames);
  table.setPreferredScrollableViewportSize(new Dimension(500, 70));
  table.setFillsViewportHeight(true);

  JScrollPane scrollPane = new JScrollPane(table);
  add(scrollPane);
}

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

public void run() {
try {
  UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e) {
  e.printStackTrace();
}
  GUITable ex = new GUITable();
  ex.setVisible(true);
    }
    });
  }
}
Respuesta 1

Sí, mediante el uso de una costumbre TableCellRenderer, puede modificar la forma en que se muestra la primera columna (y solo la primera columna).

Esencialmente, puede usar esto para establecer solo TableCellRendereren la primera columna:

table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer());

Y puede extender el DefaultTableCellRendererpara ocuparse de cualquier representación especial que desee hacer:

//Custom Renderer - does the default rendering except if told the row should be a different color
public static class CustomRenderer extends DefaultTableCellRenderer{

    public CustomRenderer(){
        super();
        //Customize the rendering however you want
        setBackground(UIManager.getColor("TableHeader.background"));
    }
}

Para poner todo junto en tu ejemplo:

import javax.swing.*; 
import javax.swing.table.DefaultTableCellRenderer;

import java.awt.*; 
public class TestTable extends JFrame{

    public TestTable(){ 
        init(); 
    } 

    public final void init(){ 
        String[] columnNames = {"", "Gross Weight"}; 

        Object[][] data = {{"", new Integer(100)},}; 

        final JTable table = new JTable(data, columnNames); 
        // Add Renderer to first column only
        table.getColumnModel().getColumn(0).setCellRenderer(new CustomRenderer());
        table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
        table.setFillsViewportHeight(true); 

        JScrollPane scrollPane = new JScrollPane(table); 
        scrollPane.setPreferredSize(new Dimension(300, 200));
        add(scrollPane); 
    } 

    public static void main(String[] args) { 
        SwingUtilities.invokeLater(new Runnable() { 

            public void run() { 
                try { 
                    UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
                } catch (Exception e) { 
                    e.printStackTrace(); 
                } 
                TestTable ex = new TestTable();
                ex.pack();
                ex.setVisible(true); 

            } 
        }); 
    } 

    //Custom Renderer - does the default rendering except if told the row should be a different color
    public static class CustomRenderer extends DefaultTableCellRenderer{

        public CustomRenderer(){
            super();
            //Customize the rendering however you want
            setBackground(UIManager.getColor("TableHeader.background"));
        }
    }

} 
Respuesta: 2

Necesito identificar las excepciones de fallas de conexión de la base de datos frente a otras excepciones y manejarlas en consecuencia dentro de mi controlador de errores de escucha kafka. Como todo se convierte a DataAcccessException en ...

La única forma que he encontrado de dibujar parte de una imagen es con esta función drawImage: public abstract boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2 , ...

Obtuve el siguiente SQL que quería transformar en HQL válido. El problema con esto es que no está permitido unirse en una subconsulta según los documentos. Aunque estos son documentos antiguos (v3.3) esto ...

Estamos utilizando una función de política de uso aceptable para implementar un requisito en el que el usuario tiene que aceptar algún acuerdo de licencia antes de utilizar nuestros servicios registrados. Hemos implementado nuestra costumbre ...