1

というJTableカスタムTableModelがありDataTableModelます。次のように、一連の列名とデータなしでテーブルを初期化しました。

books = new JTable(new DataTableModel(new Vector<Vector<String>>(), title2));
JScrollPane scroll1 = new JScrollPane(books);
scroll1.setEnabled(true);
scroll1.setVisible(true);
JSplitPane jsp1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scroll1, scroll2);
JSplitPane jsp2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, inventory, jsp1);
myPanel.add(jsp2, BorderLayout.CENTER);

後で一連のデータを使用して書籍を更新し、次を使用したいと考えています。

DataTableModel d = (DataTableModel)books.getModel();
d.setValues(bookList);
books.setModel(d);

ここで bookList はVector<Vector<String>>確実にデータを持つ です。ただし、このコードはすべて実行されていますが、画面には表示されません。setValues()メソッドのコードは次のとおりです。

public void setValues(Vector<Vector<String>> v) {
    values = v;
    fireTableDataChanged();
}

ここで何か不足していますか?

私の DataTableModel のクラスとメソッドは次のとおりです (これらのメソッドはすべて、正しい結果を返すように実装されています)。

public class DataTableModel extends AbstractTableModel {
    public DataTableModel(Vector<Vector<String>> v, Vector<String> c) {}

    public int getColumnCount() {
        if (values != null && values.size() > 0)
            return values.elementAt(0).size();
        else
            return 0;
    }

    public int getRowCount() {
        if (values != null && values.size() > 0)
            return values.size();
        else
            return 0;
    }

    public Object getValueAt(int arg0, int arg1) {}
    public void setValues(Vector<Vector<String>> v) {}
    public Vector<Vector<String>> getValues() {}
    public void setColumnNames(Vector<String> columns) {}
    public String getColumnName(int col) {}
}
4

3 に答える 3

0

これは奇妙な問題です。あなたはそれがDataTableModel実装すると言いましたTableModel。そう。抽象クラスを使用しない場合、問題はイベントの処理方法にあるはずです。リスナーは本当に登録されてから通知されますか? 可能であれば、のソースへのリンクを送ってくださいDataTableModel。ただし、その前に、このモデルに登録されたリスナーを正しく処理していることを確認してください。

于 2008-12-16T08:28:04.483 に答える