Выделение ячейки в JTable - Java

Узнай цену своей работы

Формулировка задачи:

Есть задание сделать что-то вроде электронной таблицы. Обработчик выражений сделал, а вот с интерфейсом проблемы. Проблема в следующем: мне нужно, чтобы можно было выделять только ячейку, без столбца и ряда. Если использовать:
Листинг программы
  1. table.setColumnSelectionAllowed(true);
  2. table.setRowSelectionAllowed(true);
Тогда выделение происходит одной ячейки, но когда выбираю несколько, зажав Ctrl - выделяются несколько на одной линии, либо по диагонали. Очень нужна подсказка, чтоб это решить.

Решение задачи: «Выделение ячейки в JTable»

textual
Листинг программы
  1. class Cell {
  2.     private int row;
  3.  
  4.     private int column;
  5.  
  6.     public Cell(int row, int column) {
  7.         this.row = row;
  8.         this.column = column;
  9.     }
  10.  
  11.     public boolean is(int r, int c) {
  12.         return row == r && column == c;
  13.     }
  14. }
  15.  
  16. class CellSelectionSet {
  17.     private ArrayList<Cell> cells = new ArrayList<TestTimeTable.Cell>();
  18.  
  19.     public void add(int r, int c) {
  20.         if (!contains(r, c)) {
  21.             cells.add(new Cell(r, c));
  22.         }
  23.     }
  24.  
  25.     public boolean containsOneOrLess() {
  26.         return cells.size() <= 1;
  27.     }
  28.  
  29.     public boolean contains(int r, int c) {
  30.         for (Cell cell : cells) {
  31.             if (cell.is(r, c)) {
  32.                 return true;
  33.             }
  34.         }
  35.         return false;
  36.     }
  37.  
  38.     public void clear() {
  39.         cells.clear();
  40.     }
  41.  
  42. this.timeTable = new JTable(this.rowData, this.daysOfTheWeek) {
  43.         CellSelectionSet cellSelectionSet = new CellSelectionSet();
  44.  
  45.         @Override
  46.         public boolean isCellEditable(int row, int column) {
  47.             return false;
  48.         }
  49.  
  50.         @Override
  51.         public void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend) {
  52.             super.changeSelection(rowIndex, columnIndex, toggle, extend);
  53.  
  54.             if (toggle) {
  55.                     cellSelectionSet.add(rowIndex, columnIndex);
  56.  
  57.             } else {
  58.                 if (extend) {
  59.                     cellSelectionSet.add(rowIndex, columnIndex);
  60.  
  61.                 } else {
  62.                     // reset
  63.                     cellSelectionSet.clear();
  64.                     cellSelectionSet.add(rowIndex, columnIndex);
  65.                 }
  66.             }
  67.  
  68.       }
  69.  
  70.         @Override
  71.         public boolean isCellSelected(int row, int column) {
  72.             if (cellSelectionSet.containsOneOrLess()) {
  73.                 // show the default
  74.                 return super.isCellSelected(row, column);
  75.             }
  76.             return cellSelectionSet.contains(row, column);
  77.         }
  78.  
  79.     };
  80.  
  81. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут