1

JTable 用に独自のカスタム TableModel を作成しようとしています (JCheckBox の行をテーブルに組み込みたいため)。 JScrollPane にも JTable があります。JCheckBox とカスタム AbstractTableModel を組み込む前に、デフォルトの (Object[][], Object[]) コンストラクターを使用すると、JTable は正常に表示されました。Sun の JTable チュートリアルで、これらのコンストラクターはすべてのデータを文字列として扱うデフォルトを使用していると読みました。

次に、カスタム AbstractTableModel を作成し、次のようにしました。

JTable table = new JTable(dataArray, col);

これに:

JTable table = new JTable();

これにより、AbstractTableModel を拡張するカスタムメイドのクラスで JTable を作成しようとする試みが呼び出されると想定していますが、JScrollPane には何も表示されません。

私はこれを間違って使用していますか?Sun のチュートリアルからコードを仮想的にコピーし、関連するデータファイルの名前のみを変更しました。このメソッドも同じクラスに配置しました。テーブルがカスタム テーブル モデルで作成されていることを確認する別の方法はありますか? どんな洞察もいただければ幸いです。

4

4 に答える 4

1

あなたが観察したように、Ash はJTableコンストラクターでデータ モデルを渡すことについて正しいです。モデルがをgetColumnClass()返した場合、デフォルトBoolean.classでチェック ボックス レンダラーが表示されます。カスタム レンダラーとエディターの使用法を示すこのが好きかもしれません。

于 2010-02-14T02:23:23.380 に答える
1

JTableパラメータとして aを取るいくつかのコンストラクタがTableModelあります。それはあなたが探しているものですか?あなたが提供したコード スニペットから、デフォルトのコンストラクターを呼び出して、何らかの方法でカスタム テーブル モデルを使用することを期待しているようです。(これを行うコードが不足している可能性がありますか?)。デフォルトのコンストラクタを使用すると、JTable内部でDefaultTableModelインスタンスが作成され、それが使用されます。

編集: コメントはコードをうまく処理できないため、ここに追加: モデルを使用するテーブルを取得するには、次のようにします。

MyTableModel model = new MyTableModel();
// ...initialise model if required
JTable table = new JTable(model);
于 2010-02-14T01:31:45.437 に答える
0

わかった。コードを確認した後、コンストラクターを除外すると、カスタム テーブル モデルへのリンクが見つからないことに気付きました。したがって、クラスを作成した場合:

class MyTableModel extends AbstractTableModel {
//code here
}

次のように JTable コンストラクターでインスタンス化する必要があります。

JTable table = new JTable(new MyTableModel());

したがって、空白のままにして、新しい AbstractTableModel クラスを「見つける」ことを期待することはできません。

于 2010-02-14T02:16:02.967 に答える
0

AbstractTableModelを拡張し、これを JTable のコンストラクターのパラメーターとして渡す必要があります。(マークがそうであるように)。必要なメソッドに加えて、実際のチェックボックスを表示するには、このメソッドを定義する必要があります。

 public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

これにより、各セルをレンダリングする方法が JTable に通知されます。これをオーバーライドしないと、文字列として表示されます。

于 2010-02-14T02:24:18.137 に答える