JTable con imagenes

maguete
21 de Octubre del 2005
necesito insertar en una de las columnas de un JTable imagenes .gif
Alguien me puede tirar algun dato??
Gracias...

chuidiang
21 de Octubre del 2005
Hola:

Cuando un JTable necesita pintar un dato en una celda, le pregunta a una clase que tiene internamente cómo se pinta ese dato. Esta clase es un TableCellRenderer.

Tu puedes hacerte tu propia clase TableCellRenderer. Basta hacer una clase que herede de aqui y redefinir el único método que tiene esa interface, el getTableCellRendererComponent(). El componente java que devuelvas en este método, será el que se use para pintar la tabla. Pudes devolver un JLabel con una imagen dentro.

A la tabla debes pasarle el render que tú has hecho. Llama al método setDefaultRenderer().

En http://www.geocities.com/chuidiang/java/tablas/tablarender/tablarender.html tienes un pequeño tutorial sobre el tema y un ejemplo

mungassey
21 de Octubre del 2005
espero que te sirva esto ...

import java.util.Vector;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;

public class PruebaJTable extends JFrame {
private JPanel ivjJFrameContentPane = null;
private JScrollPane ivjscrollPaneTabla = null;
private JTable tabla = null;

public class ModeloTabla extends AbstractTableModel {
private String[] columnNames;
private Object[][] data;

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

public String getColumnName(int col) {
return columnNames[col];
}

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

public Object getValueAt(int row, int col) {
return data[row][col];
}

public boolean isCellEditable(int row, int col) {
return false;
}

public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}

public void pasaVectores(Vector campos, Vector registros, int columna, int renglon) {
columnNames = new String[columna];

for (int i = 0; i < columna; i++) {
columnNames[i] = (String) campos.get(i);
//log.debug(columnNames[i] + "t");
}

data = new Object[renglon][columna];

for (int i = 0; i < renglon; i++) {
Vector regisTemp = (Vector) registros.get(i);

for (int j = 0; j < columna; j++) {
data[i][j] = regisTemp.get(j);
//log.debug(data[i][j] + "t");
}
//log.debug("");
}
}
}
public PruebaJTable() {
super();
initialize();
}


private JPanel getJFrameContentPane() {
if (ivjJFrameContentPane == null) {
try {
ivjJFrameContentPane = new JPanel();
ivjJFrameContentPane.setName("JFrameContentPane");
ivjJFrameContentPane.setLayout(null);
getJFrameContentPane().add(getscrollPaneTabla(), getscrollPaneTabla().getName());
} catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}

return ivjJFrameContentPane;
}

private JScrollPane getscrollPaneTabla() {
if (ivjscrollPaneTabla == null) {
try {
ivjscrollPaneTabla = new JScrollPane();
ivjscrollPaneTabla.setName("scrollPaneTabla");
ivjscrollPaneTabla.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
ivjscrollPaneTabla.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
ivjscrollPaneTabla.setBorder(new BevelBorder(BevelBorder.LOWERED));
ivjscrollPaneTabla.setBounds(56, 43, 375, 237);
} catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}
}

return ivjscrollPaneTabla;
}

private void handleException(java.lang.Throwable exception) {
System.out.println("--------- EXception no manejada ---------");
exception.printStackTrace(System.out);
}

private void initAlineacionColumnas(JTable table) {
TableColumn column = null;
DefaultTableCellRenderer dtcr = null;

int i = 0;

for (i = 1; i < table.getColumnCount(); i++) {
dtcr = new DefaultTableCellRenderer();

if (i == 1) {
dtcr.setName("LocalCellRenderer " + i);
dtcr.setAlignmentX(java.awt.Component.CENTER_ALIGNMENT);
dtcr.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
dtcr.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
}

column = tabla.getColumnModel().getColumn(i);
column.setCellRenderer(dtcr);
}
}

private void initialize() {
try {
setName("PruebaJTable");
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setSize(488, 324);
setContentPane(getJFrameContentPane());
} catch (java.lang.Throwable ivjExc) {
handleException(ivjExc);
}

muestraTabla();
}

public static void main(java.lang.String[] args) {
try {
PruebaJTable aPruebaJTable;
aPruebaJTable = new PruebaJTable();

aPruebaJTable.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
};
});

aPruebaJTable.show();
java.awt.Insets insets = aPruebaJTable.getInsets();
aPruebaJTable.setSize(aPruebaJTable.getWidth() + insets.left + insets.right, aPruebaJTable.getHeight() + insets.top + insets.bottom);
aPruebaJTable.setVisible(true);
} catch (Throwable exception) {
System.err.println("Exception occurred in main() of javax.swing.JFrame");
exception.printStackTrace(System.out);
System.exit(0);
}
}

private void muestraTabla() {
Vector registro = new Vector();
Vector renglones = new Vector();
Vector columnas = new Vector();

ImageIcon disco = new ImageIcon("c:\img\disco.gif");
ImageIcon salir = new ImageIcon("c:\img\salir.gif");
ImageIcon archivero = new ImageIcon("c:\img\archivero.gif");
ImageIcon verarchivo = new ImageIcon("c:\img\verarchivo.gif");
ImageIcon impresora = new ImageIcon("c:\img\impresora.gif");

columnas.addElement("IMAGEN");
columnas.addElement("NOMBRE");

registro.addElement(disco);
registro.addElement("disco.gif");
renglones.addElement(registro);

registro = new Vector();
registro.addElement(salir);
registro.addElement("salir.gif");
renglones.addElement(registro);

registro = new Vector();
registro.addElement(archivero);
registro.addElement("archivero.gif");
renglones.addElement(registro);

registro = new Vector();
registro.addElement(verarchivo);
registro.addElement("verarchivo.gif");
renglones.addElement(registro);

registro = new Vector();
registro.addElement(impresora);
registro.addElement("impresora.gif");
renglones.addElement(registro);

ModeloTabla mt = new ModeloTabla();
mt.pasaVectores(columnas, renglones, columnas.size(), renglones.size());

tabla = new JTable(mt);
tabla.setRowHeight(50);
initAlineacionColumnas(tabla);

getscrollPaneTabla().getViewport().add(tabla);
}
}