Я прошу прощения, если об этом уже спрашивали, но я не могу найти ответ здесь.
У меня есть 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 были только строки:
Как это выглядит с JTable, имеющим String и Booleans:
Настройки столбца JTable в NetBeans: