2016-08-05 2 views
0

У меня есть 7 таблиц на моем экране. Поскольку они являются независимыми таблицами, я могу выбрать ячейку из каждого из них.Снять выделение строк JTable

Хотя я хочу, чтобы каждый раз, когда я делаю выбор ячейки в таблице, я хочу отменить выделение ячейки из таблицы, из которой была выбрана ячейка, и, следовательно, для других таблиц.

В принципе, я хочу, чтобы выбор ячейки из одной таблицы за раз.

Также я хотел бы отменить выбор выбранной ячейки всякий раз, когда мышь нажата в любом месте экрана.

Я пробовал clearselection(), но он, похоже, не работает.

+1

* «Я пробовал' clearselection() ', но он не работает». * Конечно, он работает, если используется правильно. Единственный вывод, который мы можем сделать, заключается в том, что код не использует его правильно. По этому вопросу .. Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). (Включите две таблицы, а не 7.). –

+0

Сокращение количества таблиц не соответствует требованиям. – shashank

+1

* «Сокращение количества таблиц не соответствует требованиям» *. Исключительное требование не имеет значения. Если вам удастся это сделать только с двумя таблицами, это должно быть легко сделать с 3, 10 или 1000. Я укажу, что «отказ предоставить MCVE» указан в двух отдельных вопросах «закрыть этот вопрос». Я уже добавил закрытый голос, основанный на одном из них. Поэтому решите, хотите ли вы решить указанную проблему, и если да, отправьте MCVE. Потому что, если еще 4 человека согласятся с моей оценкой, этот вопрос будет закрыт .. –

ответ

1

Создайте TableGroup для обеспечения соответствия SINGLE_SELECTION по группе таблиц, каждая из которых имеет свои собственные ListSelectionModel. В приведенном ниже примере содержится List<JTable>, который может управлять выбором для произвольного количества таблиц.

Использование:

SelectionGroup group = new SelectionGroup(); 
group.add(new JTable(…)); 
group.add(new JTable(…)); 
… 

Код:

private static class TableGroup { 

    private final List<JTable> list = new ArrayList<>(); 

    private void add(JTable table) { 
     list.add(table); 
     ListSelectionModel model = table.getSelectionModel(); 
     model.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     model.addListSelectionListener(new ListSelectionListener() { 
      @Override 
      public void valueChanged(ListSelectionEvent e) { 
       if (!e.getValueIsAdjusting()) { 
        for (JTable t : list) { 
         if (!t.equals(table)) { 
          t.clearSelection(); 
         } 
        } 
       } 
      } 
     }); 
    } 
} 

TableGroup концептуально похож на ButtonGroup, видел here и here.

+0

Код не работает, как предполагалось Как только я выберу таблицу, выбранная ранее таблица будет отменена, но выбранная таблица также будет отменена. Но я хочу сохранить выделение для текущей выбранной таблицы. – shashank

+0

Я не могу воспроизвести описанный вами эффект; отредактируйте свой вопрос, чтобы включить [mcve], который показывает ваш текущий подход. – trashgod