拡張された DefaultTableModel からのデータを含む ScrollPane に JTable があります。データをテーブルにロードすると、列が表示されます。スクロールバーはデータがそこにあることを示していますが、表示されていません。スクロールするとすぐにデータが表示されます。モデルであらゆる種類の fire() イベントを試し、Jtable で .repaint()、.revalidate などを試しましたが、うまくいきません。明らかに、CellRenderer は呼び出されません。どうすればこれを解決できますか?
public void setTestcaseModel(TestcaseTableModel testcase_model, List<String> names) {
this.testcaseTableModel = testcase_model;
testcaseTable.setModel(this.testcaseTableModel);
testcaseTable.setRowHeight(40);
TableColumn column = testcaseTable.getColumnModel().getColumn(0);
column.setCellRenderer(new TestcaseCellRenderer(names, this, tgc));
TestcaseCellEditor editor = new TestcaseCellEditor(testcaseTable,this);
column.setCellEditor(editor);
editor.addCellEditorListener(tgc);
this.testcaseTableModel.fireTableDataChanged();
}
テストケーステーブルモデル
package gui.table;
import java.util.List;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import org.jdom2.Element;
@SuppressWarnings("serial")
public class TestcaseTableModel extends DefaultTableModel {
String[] columnNames = { "Testcase" };
Vector<String[]> row_data = new Vector<String[]>();
public TestcaseTableModel(Element testSuite) {
row_data.clear();
List<Element> testcase_list = testSuite.getChildren("TestCase");
String[] data;
for (int i = 0; i < testcase_list.size(); i++) {
data = new String[4];
data[0] = "";
data[1] = "failed";
data[2] = testcase_list.get(i).getAttributeValue("id");
data[3] = "play";
row_data.add(data);
}
}
@Override
public void setValueAt(Object value, int row, int col) {
// Output gui NULL exception
if (value == null)
return;
row_data.elementAt(row)[col] = value.toString();
fireTableCellUpdated(row, col);
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return row_data == null ? 0 : row_data.size();
}
@Override
public String getValueAt(int row, int col) {
return row_data.elementAt(row)[col];
}
public String getColumnName(int column) {
return columnNames[column];
}
public void clear(){
row_data.clear();
fireTableDataChanged();
}
}
アイデアをありがとう。