JTable, как я могу поместить иконки в шапку?
Я пытаюсь сделать некоторые иконки в заголовке JTable без успеха. Я уже пробовал что-то вроде этого: http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizingColumnHeaderswithIcons.htm но в заголовке не отображается значок. Как я могу достичь этой цели?
3 ответа
Ваша ссылка - это хороший код, но на самом деле, когда вы загружаете изображение, используя абсолютный или относительный путь, этот код не является переносимым. Так что лучше загружать изображение из класса. Уровни: 1) Создайте пустой класс с таким именем: ImageResources 2) Скопируйте ваше изображение. 3) Найдите класс ImageResources в проводнике пакетов (в eclipse), щелкните его правой кнопкой мыши (ImageResources) и нажмите "Вставить" menuItem. 4) Наконец, вам нужно небольшое изменение в вашем коде, как это
ImageIcon blueIcon = new ImageIcon(ImageResources.class.getResource(yourPictureName));
Это работает:)
Ниже метод сработал для меня.
MyTable.getColumn("ColumnName").setHeaderRenderer(new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
return new JLabel(new ImageIcon(getClass().getResource("/project/img/ImgName.png")));
}
});
Вопрос немного старше, но я только сейчас столкнулся с тем же вопросом.
Другой подход состоит в том, чтобы переопределить TableModel.
getColumnName
функция. Поддерживается текст в формате HTML .
Вот пример кода:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
public class TableColumnHeaderIcon {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
TableModel tableModel = new AbstractTableModel() {
@Override
public String getColumnName(int columnIndex) {
// Build the html formatted text
StringBuilder sb = new StringBuilder();
sb.append("<html>");
sb.append("<img src=\"https://via.placeholder.com/16/007AAE/\">");
sb.append(" Column Title");
sb.append("</html>");
return sb.toString();
}
@Override
public int getColumnCount() {
return 1;
}
@Override
public int getRowCount() {
return 0; // No data required
}
@Override
public Object getValueAt(int i, int i1) {
return null; // No data required
}
};
// Setup UI
JScrollPane scrollPaneTable = new JScrollPane();
JTable table = new JTable(tableModel);
scrollPaneTable.setViewportView(table);
JFrame mdi = new JFrame("Test JTable Column Header with Icon");
mdi.setSize(600, 400);
mdi.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
mdi.add(scrollPaneTable);
mdi.setVisible(true);
});
}
}