Прокручиваемые ячейки в JTable

У меня есть Jtable, в котором я должен показать большие данные. Я не могу увеличить размер ячеек. Поэтому мне нужно добавить полосу прокрутки в каждую ячейку таблицы, с помощью которой я могу прокручивать текст ячеек.

Я попытался добавить пользовательский рендерер ячеек

private class ExtendedTableCellEditor extends AbstractCellEditor implements TableCellEditor
{
    JLabel area = new JLabel();
    String text;

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex)
    { 
        area.setText(text);
        return new JScrollPane(area);
        }
            public Object getCellEditorValue()
        {
        return text;
    }
}

Теперь я вижу полосу прокрутки в ячейках, но не могу щелкнуть и прокрутить их.

Любые предложения по этому вопросу будут отличными. Заранее спасибо.


person Ram Dutt Shukla    schedule 22.02.2012    source источник
comment
Вам потребуется как пользовательский визуализатор , так и пользовательский редактор, последний из которых активен, когда активна ячейка.   -  person Hovercraft Full Of Eels    schedule 22.02.2012
comment
TablePopupEditor — хороший пример.   -  person trashgod    schedule 22.02.2012
comment
Это действительно хороший пример. Спасибо, Trashgod   -  person Ram Dutt Shukla    schedule 01.03.2012


Ответы (1)


Добавление JScrollPane и размещение JLabel в JScrollPane решило проблему. Поэтому я хотел бы поделиться им со всеми вами.

private class ExtendedTableCellEditor extends AbstractCellEditor implements TableCellEditor
{
  JLabel _component = new JLabel();
  JScrollPane _pane = new JScrollPane(_component, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

 /**
  * Returns the cell editor component.
  *
  */
  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int vColIndex)
  {
    if (value == null) return null;
    _component.setText(value != null ? value.toString() : "");
    _component.setToolTipText(value != null ? value.toString() : "");

    _component.setOpaque(true);
    _component.setBackground((isSelected) ? Color.BLUE_DARK : Color.WHITE);
    _component.setForeground((isSelected) ? Color.WHITE : Color.BLACK);

    _pane.setHorizontalScrollBar(_pane.createHorizontalScrollBar()); 
    _pane.setVerticalScrollBar(_pane.createVerticalScrollBar());
    _pane.setBorder(new EmptyBorder(0,0,0,0));
    _pane.setToolTipText(value != null ? value.toString() : "");
    return _pane;
  }
  public Object getCellEditorValue()
  {
    return _component.getText();
  }
}
person Ram Dutt Shukla    schedule 06.03.2013