0

データとさまざまな背景色を表示する単純な 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);

    }

何か案は?ありがとうございました。

4

0 に答える 0