データとさまざまな背景色を表示する単純な JTable があります。データの表示と行の色分けは、DefaultTableModel でうまく機能します。しかし、行をクリックしたときに何かをロードするために MouseListener を行に追加すると、背景色が消えます。いくつかの行をマークしても同じです。行をマークする必要はまったくありません。色もそのままにして、MouseEvent を機能させる必要があるだけです。関連するコードは次のとおりです。
testcase_table = new JTable() {
public Component prepareRenderer(TableCellRenderer renderer,
int row, int column) {
List<Element> cases = element.getChildren();
int passed = 0;
Component c = super.prepareRenderer(renderer, row, column);
if (!isRowSelected(row)) {
c.setBackground(getBackground());
passed = 0;
if (row <= running_testcase) {
List<Element> teststeps = cases.get(row).getChildren();
for (Element teststep : teststeps) {
if (teststep.getAttribute("status") != null
&& teststep.getAttributeValue("status")
.equals("failed")) {
passed++;
}
}
if (passed > 0) {
c.setBackground(Color.RED);
}
if (passed == 0) {
c.setBackground(Color.GREEN);
}
}
}
return c;
}
};
testcase_table.setFocusable(false);
testcase_table.setRowSelectionAllowed(false);
testcase_table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
JTable target = (JTable)e.getSource();
int row = target.getSelectedRow();
//set_values(doc,25);
set_teststeps(doc, row);
}
}
});
private void DisplayData(List<String> Testcases) {
aModel = new DefaultTableModel() {
// setting the jtable read only
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
// setting the column name
Object[] tableColumnNames = new Object[1];
tableColumnNames[0] = "TestCases";
aModel.setColumnIdentifiers(tableColumnNames);
if (Testcases == null) {
testcase_table.setModel(aModel);
return;
}
Object[] objects = new Object[1];
ListIterator<String> lstrg = Testcases.listIterator();
// populating the tablemodel
while (lstrg.hasNext()) {
String newcus = lstrg.next();
objects[0] = newcus;
aModel.addRow(objects);
}
// binding the jtable to the model
testcase_table.setModel(aModel);
}
何か案は?ありがとうございました。