2012-02-22 66 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

您將需要自定義渲染器*和*自定義編輯器,當單元格處於「活動」狀態時,後者將處於活動狀態。 – 2012-02-22 16:38:20

+2

['TablePopupEditor'](http://stackoverflow.com/a/3591230/230513)就是一個很好的例子。 – trashgod 2012-02-22 16:47:32

+1

它非常好exmaple.Thansk垃圾回收 – 2012-03-01 06:18:53

回答

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