Добавление изображения или значка в "JTable"
Класс JTable предоставляет метод для вставки значков или изображений. JTable необходимо указать тип объектов, хранящихся в столбце таблицы, чтобы можно было выбрать подходящую визуализацию. Это делается путем вызова метода getColumnClass(...):public Class getColumnClass(int column)Java определяет, указан ли рендерер JTable или нет, в противном случае JTable вызывает шаблон и вызывает getColumnClass() который извлекает тип ячейки в первой строке. Затем он сравнивает его со списком типов данных, в которых сохранены воспроизведения. Этот список инициируется JTable, но его можно добавлять или редактировать. Рендеринг включает в себя ImageIcon и Icon.
{
return getValueAt(0, column).getClass();
}
В следующем примере показано, как добавить изображения в столбец:
import javax.swing.*;Результат после выполнения:
импорт javax.swing.table.*;
public class Table_image extends JFrame
{
public Table_image()
{
ImageIcon icon1 = new ImageIcon("1.png");
ImageIcon icon2 = new ImageIcon("2.png");
ImageIcon icon3 = new ImageIcon("3.png");
ImageIcon icon4 = new ImageIcon("4.png");
string[] title = {"Операционная система", "Популярность"};
Object[][] data =
{
{icon1, "Android: 76.6%"},
{icon2, "IOS: 19.7%"},
{icon3, "Windows Phone: 2.8%"},
{icon4, "BlackBerry OS: 1%"},
};
шаблон DefaultTableModel = new DefaultTableModel(data, Title);
JTable table = new JTable( template )
{
/*автоматическое определение типов данных
*всех столбцов
*/
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
};
//изменить высоту строки
table.setRowHeight(100);
JScrollPane scrollPane = новый JScrollPane( таблица);
getContentPane().add( scrollPane );
}
public static void main(String[] args)
{
Table_image frame = new Table_image();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}
Если вы не реализуете getColumnClass, столбец будет содержать текст(имя файла), а не изображения. Например, вместо вставки логотипа Android JTable отобразит "1.png".
Если вы используете свой собственный шаблон, который наследует from AbstractTableModel, не забудьте реализовать getColumnClass в модели class.
class Model extends AbstractTableModel{Подробнее о редакторах и рендерерах читайте на официальном сайте java: Editors and Renderers.
private Object[][] data;
приватный заголовок String[];
public Model(Object[][] data, String[] title){
this.data = data;
this.title = заголовок;
}
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
public int getColumnCount() {
return this.title.length;
}
public int getRowCount() {
return this.data.length;
}
public Object getValueAt(int row, int col) {
return this.data[row][col];
}
}