Вопрос

Я реализую Tablecellrenderer Чтобы сделать видимую дистанцию, если последнее значение является или не определенным значением.

Итак, код этой реализации:

    TableColumnModel tcm = table.getColumnModel();
    TableColumn col = tcm.getColumn(column);

    JLabel cellComponent = new JLabel();
    if (value != null)
    {
        cellComponent.setText( String.valueOf( value ) );
    }else
        cellComponent.setText( "-" );

    String colName = (String) col.getHeaderValue(); 
    if (colName.startsWith("Vigencia") && !cellComponent.getText().equals("-"))
    {
        long dias = Long.valueOf(cellComponent.getText());
        if (dias <0)
        {
            dias = dias -(dias*2); //Le resto (dias x 2) para sacarle el negativo...

            cellComponent.setText( String.valueOf(dias) );
            cellComponent.setBorder( BorderFactory.createLineBorder(Color.RED));
        }
    }

Чтобы заполнить мою таблицу, у меня есть класс, который простирается от JTable и имею этот метод для заполнения таблицы:

public void setData(LinkedList<T> list)
{
    if (list.size() == 0)
    {
        cleanTableData();
        return;
    }

    int index = 0;
    Object[][] o = new Object[list.size()][_columnNames.length];
    for (T obj : list)
    {
        Object[] data = obj.toStringReporte();
        o[index++] = data;
    }
    _tableModel = new DefaultTableModel( o, _columnNames );
    setModel(_tableModel);
    setColumnWidths();
}

Метод ToStringReporte - это:

public Object[] toStringReporte()
{
    String planName = "-";
    if (getPlanID() != null)
    {
        Plan plan = Adapter.getInstance().getElement(getPlanID(), new Plan());
        planName = plan.getNombre();
    }

    return new Object[]{getID(), 
                        getNombre(), 
                        getApellido(), 
                        getDni(), 
                        (getEstado().equals("A") ? "Activo" : "Inactivo"), 
                        (getSexo().equals("M") ? "Masculino" : "Femenino"),
                        (getFichaMedica() != null ? new SimpleDateFormat(Defines.DATE_FORMAT).format(new Date(getFichaMedica())) : "-"),
                        planName,
                        (getFechaVencimiento() != null ? SGGDateUtils.diferenceInDaysBetweenTwoDatesMS(getFechaVencimiento(), new Date().getTime()) : "-")};
}

Моя проблема в том, что (как говорит имя класса) единственное изменение клетка граница. Я хочу изменить всю границу строк.

Некоторое тело знает, как изменить границу всего ряда?

Это было полезно?

Решение

Рендеринг строки таблицы Показывает, как вы можете отобразить границу уровня строк.

Другие советы

Вы не можете сделать это только с помощью Tablecellrenderer, так как он работает независимо на каждой ячейке.

Если вы хотите применить эффект на всю строку, вам, вероятно, потребуется переопределить Preparerenderer Метод JTable.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top