2012-02-22 5 views
4

У меня есть 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; 
    } 
} 

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

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

+2

Вам понадобится как собственный рендерер *, так и * специальный редактор, последний из которых активен, когда ячейка «активна». –

+2

['TablePopupEditor'] (http://stackoverflow.com/a/3591230/230513) - хороший пример. – trashgod

+1

Его действительно приятный пример.Транский трашгон –

ответ

5

Добавление 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(); 
    } 
} 
Смежные вопросы