2011-02-09 13 views

Odpowiedz

7

Albo stworzyć imageicon góry przód:

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

Albo można spróbować przesłanianie renderujący dla danej dziedzinie ikon:

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

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

Innym przykładem może być wzięty stąd: http://www.javareference.com/jrexamples/viewexample.jsp?id=125 – gumuruh

+0

setIcon ? gdzie to jest zdefiniowane? – Buffalo

+0

@Buffalo setIcon (wartość (ImageIcon)); – Benas

28

JTable już zapewnia domyślny renderer dla ikon. Wystarczy powiedzieć tabeli, jakie dane są przechowywane w danej kolumnie, aby mógł wybrać odpowiedni renderer. Odbywa się to poprzez nadpisanie getColumnClass (...) Sposób:

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

Myślę, że ta odpowiedź jest lepsza ... – Sierox

+0

Tak, działa! Dzięki. Pytanie: Dlaczego linia setPreferredScrollableViewportSize? Wydaje się działać bez niego. –

+0

@StefanReich, Nie ma nic wspólnego z wyświetlaniem ikony w tabeli. Rozmiar ramki jest inny, gdy robisz paczkę(). Zależy od twoich wymagań, jeśli używasz tej metody, czy nie. – camickr

Powiązane problemy