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

本当にいいexmaple.Thanskゴミ箱 –

答えて

5

JScrollPaneを追加し、を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(); 
    } 
} 
関連する問題