2011-02-09 27 views

risposta

7

O creare l'imageIcon in anticipo:

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

Oppure si può provare l'override del renderer per il vostro campo di icona:

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

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

un altro esempio potrebbe essere preso da qui: http://www.javareference.com/jrexamples/viewexample.jsp?id=125 – gumuruh

+0

setIcon ? dov'è definito? – Buffalo

+0

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

28

JTable fornisce già un renderer di default per le icone. Hai solo bisogno di dire alla tabella quali dati sono memorizzati in una determinata colonna in modo che possa scegliere il renderer appropriato. Questo viene fatto l'override del metodo 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

Penso che questa risposta sia migliore ... – Sierox

+0

Sì, funziona! Grazie. Domanda: perché la linea setPreferredScrollableViewportSize? Sembra funzionare bene senza di esso. –

+0

@StefanReich, Non ha nulla a che fare con la visualizzazione dell'icona nella tabella. La dimensione del frame è diversa quando si esegue il pack(). Dipende dal tuo requisito se usi il metodo o meno. – camickr

Problemi correlati