Проверка и выделение ячейки JTable
-
27-10-2019 - |
Вопрос
Я выделяю JTable
ячейки на основе проверки. В некоторых условиях я должен взять значение других столбцов. Например, если column2
Тогда есть США column3
должен быть только числовым. В качестве другого примера, если col2
«США» а также col4
число, тогда col5
должно быть только три чара. Может кто -нибудь предложить, как это можно сделать?
В приведенном ниже фрагменте, col3
содержит названия страны; col4
а также col5
зависит от col3
. Анкет Когда я нахожусь case 3
И в case 4
, Я не могу проверить значение case 2
. Анкет Например, я хочу, как, if (col3.value == "USA")
.
[code]
tcol = editorTable.getColumnModel().getColumn(0);
tcol.setCellRenderer(new CustomTableCellRenderer());
tcol = editorTable.getColumnModel().getColumn(1);
tcol.setCellRenderer(new CustomTableCellRenderer());
tcol = editorTable.getColumnModel().getColumn(2);
tcol.setCellRenderer(new CustomTableCellRenderer());
public class CustomTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent (JTable table, Object
value,boolean isSelected, boolean hasFocus, int row, int col){
Component cell = super.getTableCellRendererComponent(table, value,
isSelected,hasFocus, row, col);
if (value instanceof String) {
String str = (String) value;
switch (col) {
case 0:
col1(str, cell);
break;
case 1:
col2(str, cell);
break;
case 2:
col3(str, cell);
break;
}
}
return cell;
}
private void col1(String str, Component cell) {
if(!str.matches("[0-9a-zA-z]")){
cell.setBackground(Color.RED);
} else {
cell.setBackground(Color.GREEN);
}
}
private void col2(String str, Component cell) {
if(!str.matches("[A-Z]{3}")){
cell.setBackground(Color.RED);
} else {
cell.setBackground(Color.GREEN);
}
}
[/code]
Решение
@kleopatra и @mkorbel верны. Ваш фрагмент неполный, но это появляется Как будто вы пытаетесь решить проблемы редактора и модели в рендерере.
Вы можете проверить введенные значения в пользовательском TableCellEditor
, как показано в этом пример. Анкет Вы можете справиться зависимый столбцы в TableModel
, как показано в этом пример.
В комментарии вы говорите: «Если я не ошибаюсь, prepareRenderer()
нуждается в цикле всех рядов, верно? "
Нет, JTable
«Внутренние реализации всегда используют этот метод для подготовки рендеристов, чтобы это поведение по умолчанию было безопасно переопределено подклассом». Переходящий prepareRenderer()
наиболее полезен, когда изменения должны быть избирательно применены к все рендереры.
Видеть Концепции: редакторы и визуализаторы Больше подробностей.