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("&nbsp;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);
        });
    }
}
Другие вопросы по тегам