Как установить значок в столбце JTable? - PullRequest
5 голосов
/ 11 апреля 2011

Я могу установить заголовок столбца, но не могу установить значок во всех строках первого столбца JTable.

public class iconRenderer extends DefaultTableCellRenderer{
    public Component getTableCellRendererComponent(JTable table,Object obj,boolean isSelected,boolean hasFocus,int row,int column){
        imageicon i=(imageicon)obj;
        if(obj==i)
            setIcon(i.imageIcon);
        setBorder(UIManager.getBorder("TableHeader.cellBorder"));
        setHorizontalAlignment(JLabel.CENTER);
        return this;
    }
}

public class imageicon{
    ImageIcon imageIcon;
    imageicon(ImageIcon icon){
        imageIcon=icon;
    }
}  

и ниже строк в моем методе BuildTable ().

    public void SetIcon(JTable table, int col_index, ImageIcon icon){
      table.getTableHeader().getColumnModel().getColumn(col_index).setHeaderRenderer(new iconRenderer());
      table.getColumnModel().getColumn(col_index).setHeaderValue(new imageicon(icon));
}

Как мы можем установить его для всех строк первых столбцов?Я пытался с циклом for, но еще не получил строки для повторения, чтобы установить значок.Или есть другой способ?

Ответы [ 2 ]

9 голосов
/ 11 апреля 2011

Нет необходимости создавать собственный рендер. JTable уже поддерживает средство визуализации значков. Вам просто нужно указать таблицу, чтобы использовать этот рендерер. Это делается путем переопределения метода getColumnClass (...) модели таблицы:

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();
            }
        });
    }

}
2 голосов
/ 11 апреля 2011

Вы просто используете iconRenderer для рендеринга вашего заголовка.Также установите в колонке Cell Reneder, чтобы он также был экземпляром iconRenderer.Вызовите setCellRenderer для столбца.

http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumn.html#setCellRenderer(javax.swing.table.TableCellRenderer)

Примечание: стандарты кодирования Java указывают, что имена классов должны начинаться с заглавных букв, поэтому iconRenderer должно быть IconRenderer.

...