2015-01-12 2 views
0

Я создал массив изображений, полученных с помощью url a, и я хочу отображать их в одном столбце с новым изображением в каждой строке. Насколько я знаю, код делает правильные вещи, однако в ячейках, предназначенных для содержания каждого изображения, он возвращает BufferedImage @ ... для каждого изображения.Jtable Not Displaying Images

    Document doc = Jsoup.connect(crawlUrlp).get(); 
        Elements img = thumbnails.select("img"); 
        for (Element a : img) { 

        URL url = new URL(a.attr("src")); 

        BufferedImage[] imge = {ImageIO.read(url)}; 

        for (int i = 0; i < imge.length; i++) { 

         format.addRow(new BufferedImage[]{imge[i]}); 

        } 
       } 

Так что я тогда написал образ визуализации ячейки:

public class BufferedImageCellRenderer extends DefaultTableCellRenderer { 

@Override 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
    if (value instanceof BufferedImage) { 
     setIcon(new ImageIcon((BufferedImage) value)); 
     setText(null); 

     } 
    return this; 
} 

}

Который, кажется, не делать. Правильно ли я полагаю, что, несмотря на вывод «BufferedImage», я создал массив строк? Как показать эти изображения ???

+0

Ваш рендер выглядит отлично. Как вы устанавливаете его в JTable? – VGR

ответ

1

Так что я тогда написал образ визуализации ячейки:

Нет необходимости создавать пользовательские средства визуализации.

Вместо этого вы должны хранить значок изображения в TableModel:

//format.addRow(new BufferedImage[]{imge[i]}); 
format.addRow(new Object[]{new ImageIcon(imge[i])}); 

Теперь вы должны переопределить TableModel сказать таблицу, вы хранящая иконки в модели, так что таблица может использовать надлежащее средство визуализации. Что-то вроде:

DefaultTableModel model = new DefaultTableModel(data, columnNames) 
    { 
    @Override 
     public Class getColumnClass(int column) 
     { 
      return (column == 0) ? Icon.class : super.getColumnClass(column); 
     } 
    }; 

Простой пример, показывающий концепцию:

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

public class TableIcon extends JFrame 
{ 
    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); 
     JTable table = new JTable(model) 
     { 
      // 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(); 
      } 
     }; 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 

     JScrollPane scrollPane = new JScrollPane(table); 
     getContentPane().add(scrollPane); 

     new TableRowResizer(table); 

     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     TableColumnAdjuster tca = new TableColumnAdjuster(table); 
     tca.adjustColumns(); 
    } 

    public static void main(String[] args) 
    { 
     TableIcon frame = new TableIcon(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

} 
+0

Спасибо за ответ! Это действительно колонка 0, которая нуждается в рендеринге, хотя, что я помещаю вместо данных и имен столбцов? Я назвал все три моих столбца "" –

+1

@MaxLewisHawkins. Это был пример того, как переопределить метод getColumnClass (...). Прочтите API-интерфейс DefaultTableModel для других конструкторов, которые вы можете использовать. Здесь вы указываете имена столбцов и 0 строк, чтобы вы могли динамически добавлять строки в модель – camickr

+0

. Большое вам спасибо за вашу помощь до сих пор! –