Проблема с TableCellRenderer, пытаясь добавить JLabel (изображение) в ячейку JTable - PullRequest
0 голосов
/ 22 ноября 2011

Вот мой кусок кода -

class ButtonCellRenderer extends AbstractCellEditor
    implements TableCellRenderer,TableCellEditor,MouseListener{

        JTable table;
        JLabel rendererLabel ;
        JButton editButton ;
         String text = "BAKRA";


        public ButtonCellRenderer(JTable table, int column) {
            this.table = table;
        rendererLabel = new JLabel("value.png");


            //rendererBut.setToolTipText("BUNTHAAAAAAAAAAAAAA");
            rendererLabel .addMouseListener(this);


             TableColumnModel columnModel = table.getColumnModel();
             columnModel.getColumn(column).setCellRenderer( this );
                columnModel.getColumn(column).setCellEditor( this );
        }

        public Component getTableCellRendererComponent(JTable table,
                Object value, boolean isSelected, boolean hasFocus, int row
                , int column) {
            // TODO Auto-generated method stub
            rendererLabel.setOpaque(true);

    if(isSelected)
    rendererLabel.setBackground( table.getSelectionBackground());
    else
    rendererLabel.setBackground(Color.WHITE);


            return rendererLabel ;
        }

        public Component getTableCellEditorComponent(
                JTable table, Object value, boolean isSelected, int row, int column)
        {

            return rendererLabel ;
        }

        public Object getCellEditorValue() {
            // TODO Auto-generated method stub
            return text;
        }

        public void mousePerformed(ActionEvent ev) {
            // TODO Auto-generated method stub




            JOptionPane.showMessageDialog(null, "UOBS BUTTON PRESSED",
                    "BUTTON PRESSED"
                    ,JOptionPane.ERROR_MESSAGE);
        }



    }

В этом все работает нормально, но - На самом деле, когда открывается окно JTable и если я щелкаю непосредственно по столбцу на основе JLabel (изображение), то изображение на некоторое время исчезает, и таблица возвращает выбранную строку как -1. Еще один момент заключается в том, что выбор строки также ограничен предыдущим столбцом.

Точно, если в моей таблице 4 столбца, а изображение (JLabel) находится на столбец номер 4, тогда, если я непосредственно нажимаю на изображение или столбец 4-й , то выбор строки происходит до 3-го столбца и возвращается выбор строки как -1. Но если я выберу любой другой столбец, все в порядке и работает нормально.

1 Ответ

4 голосов
/ 22 ноября 2011

Нет необходимости создавать собственный рендерер для отображения изображения.JTable уже поддерживает рендерер по умолчанию для иконок.Просто добавьте ImageIcon к модели.Затем вам нужно переопределить метод getColumnClass(), чтобы вернуть Icon.class для этого столбца, и будет использоваться правильный рендерер.

Если вы пытаетесь создать какую-то нажимаемую кнопку, вы можете использовать Столбец Столбец столбец , который также поддерживает значки.

...