2011-06-17 10 views
3

JTableの特定の列にスクロール機能を追加しようとしています。カスタムのTableCellRendererコンポーネントを実装しましたが、テーブル内のスクロールペインがうまく表示されていますが、スクロールできません。私はTableCellEditorも実装しようとしましたが、何の幸運もありませんでした。JTable列にJScrollPaneコンポーネントを追加する

public Component getTableCellEditorComponent(JTable arg0, Object arg1, 
     boolean arg2, int arg3, int arg4) { 
    return scrollPane; 
} 

誰もがスクロール可能なスクロールを含むこれらの細胞を作る方法任意のアイデアを持っていますか?

+0

私はJScrollPaneを試したことはありませんが、私はJButtonテーブルのセルエディタと同様のことを行っています。あなたのコードは編集の開始と編集の停止をどのように処理しますか? –

答えて

5

TableCellRendererでは、スクロール動作を追加することはできません。スクロール動作はイベントを受け取らず、コンポーネントのみを描画するためです。 ことが可能である - しかし - getTableCellEditorされた状態でカスタムするTableCellEditorを使用することによって、これを達成するために:

public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
    JTextArea area = new JTextArea(); 
    area.setLineWrap(true); 
    area.setText((String) value); 

    JScrollPane pane = new JScrollPane(area); 

    return pane; 
} 

また、あなたはあなたのcellEditorをの編集動作を制御する必要があります。常にセルが編集可能とスクロール可能にするために、isCellEditableは次のようになります。

public boolean isCellEditable(EventObject anEvent) { 
    return true; 
} 

は個人的に、私はしかし、何よりもハックの多くをするこの解決策を見つけます。 また、これはテスト用である必要があります。あなたは実際に私の意見ではより良い編集動作を実装する必要があります。

+0

ありがとう、私はisCellEditableメソッドがありませんでした。好奇心だけど、なぜこれをハックだと思う? – Lithium

+0

まあ、私は 'ハック'は間違った言葉だと思います。私は 'return true'ステートメントが何よりも優先され、イベントオブジェクト' anEvent'を考慮しないので、そのような文を好きではありません。しかし、セルを常に編集可能にする必要がある場合は、これを行う方法です。 – vehk

2

レンダラーはセルを塗りつぶすだけです。スクロールするにはTableCellEditorを実装する必要があると思います。

2

別の方法として、単一のスクロールペインを別のコンテナに配置し、選択リスナーでそのビューを更新することを検討してください。

関連する問題