Вопрос

Я выделяю 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() наиболее полезен, когда изменения должны быть избирательно применены к все рендереры.

Видеть Концепции: редакторы и визуализаторы Больше подробностей.

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