2

私は2つ持っていJTableます。1 つの には一定数のレコードがありますJTable

最初のテーブルがロードされたら、2 番目のテーブルに作成されるJTableのと同じ数をロードします。JCheckbox

私はこのシナリオを持っています... vlはメソッドで両方のテーブルを渡しますaddCheckBox

private void addCheckBox(JTable procTableSrc, JTable procTableCk){

    CheckBoxRenderer checkBoxRenderer = new CheckBoxRenderer();
    EachRowRenderer rowRenderer = new EachRowRenderer();
    int rows = procTableSrc.getRowCount();

    DefaultTableModel dm = (DefaultTableModel)procTableCk.getModel();

    Object [] data = new Object[][]{{new Boolean(false)},{new Boolean(false)}}; 

    for(int i=1; i <=rows; i++){
        rowRenderer.add(i, checkBoxRenderer);           
        //model.addRow(new Object []{new Boolean(false)});
    }
}

それを達成するためのコードを手伝ってください。

4

1 に答える 1

5

編集していただきありがとうございます。さらに表示して、現在のコードが原因で発生しているエラーを教えてください。

「CheckBoxRenderer」クラスに関しては、これは必要ありません。こちらにある JTable チュートリアルをお読みください。getColumnClassチェックボックスを表示するには、対象の列の Boolean.class を返すように テーブル モデルのメソッドをオーバーライドするだけでよいことがわかります。

幸運。

編集1
また、「行レンダラー」とは何ですか?それはどのような目的に役立ちますか? JTable に情報を追加するには、そのモデルに行を追加する必要がありますが、あなたのコードがそれを行っているとは思えません。DefaultTableModel API を見てください。そこには、非常に役立つ addRow(...) メソッドが表示されます。それか、データ配列を使用して新しい DefaultTableModel オブジェクトを作成します。実際には、チェック ボックスを表示する必要がある列のブール値を返すように getColumnClass() メソッドをオーバーライドできるため、おそらくこれの方が優れています。

編集 2
また、1 次元配列として宣言し、2 次元配列として初期化しているため、これはコンパイルされません。

Object [] data = new Object[][]

次のことを検討してください。

  • Object の 2 次元配列を作成し、モデルのデータを保持します。配列の最初のインデックスは JTable に表示される行数になり、2 番目は列数になります。
  • 各列の位置にブール値を入力します。
  • getColumnClass(...) をオーバーライドし、ブール値を保持し、チェック ボックスを表示する必要がある列の Boolean.class を返す新しい DefaultTableModel オブジェクトを作成します。
  • 2-D Object 配列と、おそらく列ヘッダーの String 配列を渡すことができるコンストラクターを指定します。コンストラクターの最初の行は、スーパー コンストラクターへの呼び出しである必要があり、配列パラメーターをこの呼び出しに渡す必要があります。
  • 作成したばかりのこのモデルを渡す procTableCk オブジェクトで setModel を呼び出します。
于 2011-08-07T10:41:46.237 に答える