2011-02-09 118 views

Respuesta

7

Cualquiera de crear el ImageIcon por adelantado:

ImageIcon icon = new ImageIcon("image.gif"); 
table.setValueAt(icon, row, column); 

O puede tratar de anular el procesador para su campo de icono:

static class IconRenderer extends DefaultTableCellRenderer { 
    public IconRenderer() { super(); } 

    public void setValue(Object value) { 
    if (value == null) { 
     setText(""); 
    } 
    else 
    { 
     setIcon(value); 
    } 
} 
+0

otro ejemplo sería tomada desde aquí: http://www.javareference.com/jrexamples/viewexample.jsp?id=125 – gumuruh

+0

setIcon ? ¿Dónde está eso definido? – Buffalo

+0

@Buffalo setIcon ((ImageIcon) value); – Benas

28

JTable ya proporciona un procesador de omisión de los iconos. Solo necesita decirle a la tabla qué datos se almacenan en una columna determinada para que pueda elegir el renderizador apropiado. Esto se realiza reemplazando el método getColumnClass (...):

import java.awt.*; 
import javax.swing.*; 
import javax.swing.table.*; 

public class TableIcon extends JPanel 
{ 
    public TableIcon() 
    { 
     Icon aboutIcon = new ImageIcon("about16.gif"); 
     Icon addIcon = new ImageIcon("add16.gif"); 
     Icon copyIcon = new ImageIcon("copy16.gif"); 

     String[] columnNames = {"Picture", "Description"}; 
     Object[][] data = 
     { 
      {aboutIcon, "About"}, 
      {addIcon, "Add"}, 
      {copyIcon, "Copy"}, 
     }; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames) 
     { 
      // Returning the Class of each column will allow different 
      // renderers to be used based on Class 
      public Class getColumnClass(int column) 
      { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     JTable table = new JTable(model); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 

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

    private static void createAndShowGUI() 
    { 
     JFrame frame = new JFrame("Table Icon"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new TableIcon()); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowGUI(); 
      } 
     }); 
    } 

} 
+0

Creo que esta respuesta es mejor ... – Sierox

+0

¡Sí, funciona! Gracias. Pregunta: ¿Por qué la línea setPreferredScrollableViewportSize? Parece funcionar bien sin eso. –

+0

@StefanReich, No tiene nada que ver con mostrar el icono en la tabla. El tamaño del marco es diferente cuando haces el paquete(). Depende de su requisito si usa el método o no. – camickr

Cuestiones relacionadas