Java Swing - Поместите границу вокруг строки JTable, когда строка имеет логические и строковые типы (Nimbus Look and Feel) - PullRequest
0 голосов
/ 08 мая 2018

Я прошу прощения, если об этом уже спрашивали, но я не могу найти ответ здесь.

У меня есть JTable. Мне нужно поместить красную рамку вокруг определенных строк, которые удовлетворяют определенному условию (нет значения в столбце Тип класса). Когда у меня были только строки в JTable, работал следующий код. С тех пор я добавил логический столбец (JCheckBoxes) в JTable, в результате чего мой код больше не помещает границы вокруг всей строки. Как я могу исправить код, чтобы снова поставить рамку вокруг всей строки?

Похоже, это проблема Look and Feel. Использование System LAF (в Windows 10) позволяет правильно поставить рамку вокруг всей строки, а при использовании Nimbus LAF это выглядит так, как показано ниже. Я хотел использовать Nimbus, поэтому любые советы по исправлению этой части Nimbus будут оценены по достоинству.

Я использую средства визуализации по умолчанию, предоставляемые Java с использованием NetBeans, как показано на одном из изображений ниже. Все 4 столбца имеют значение Renderer, равное «none».

Пользовательский код создания в NetBeans для JTable:

new javax.swing.JTable()
{
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
    {
        Component c = super.prepareRenderer(renderer, row, column);
        JComponent jc = (JComponent) c;

        if (rowContainsNonexistentClassType(tableFullClassList.convertRowIndexToModel(row)))
        {
            int top = (row > 0 && isRowSelected(row - 1)) ? 1 : 2;
            int left = column == 0 ? 2 : 0;
            int bottom = (row < getRowCount() - 1 && isRowSelected(row + 1)) ? 1 : 2;
            int right = column == getColumnCount() - 1 ? 2 : 0;

            jc.setBorder(BorderFactory.createMatteBorder(top, left, bottom, right, Color.RED));
        }
        else
            jc.setBorder(null);

        return c;
    }
}

Как это выглядело, когда в JTable были только строки: String-only JTable

Как это выглядит с JTable, имеющим String и Booleans: String & Boolean JTable

Настройки столбца JTable в NetBeans: JTable column settings in NetBeans

...