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

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

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

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

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

textual
Листинг программы
class Cell {
    private int row;
 
    private int column;
 
    public Cell(int row, int column) {
        this.row = row;
        this.column = column;
    }
 
    public boolean is(int r, int c) {
        return row == r && column == c;
    }
}
 
class CellSelectionSet {
    private ArrayList<Cell> cells = new ArrayList<TestTimeTable.Cell>();
 
    public void add(int r, int c) {
        if (!contains(r, c)) {
            cells.add(new Cell(r, c));
        }
    }
 
    public boolean containsOneOrLess() {
        return cells.size() <= 1;
    }
 
    public boolean contains(int r, int c) {
        for (Cell cell : cells) {
            if (cell.is(r, c)) {
                return true;
            }
        }
        return false;
    }
 
    public void clear() {
        cells.clear();
    }
 
this.timeTable = new JTable(this.rowData, this.daysOfTheWeek) {
        CellSelectionSet cellSelectionSet = new CellSelectionSet();
 
        @Override
        public boolean isCellEditable(int row, int column) {
            return false;
        }
 
        @Override
        public void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend) {
            super.changeSelection(rowIndex, columnIndex, toggle, extend);
 
            if (toggle) {
                    cellSelectionSet.add(rowIndex, columnIndex);
 
            } else {
                if (extend) {
                    cellSelectionSet.add(rowIndex, columnIndex);
 
                } else {
                    // reset
                    cellSelectionSet.clear();
                    cellSelectionSet.add(rowIndex, columnIndex);
                }
            }
 
      }
 
        @Override
        public boolean isCellSelected(int row, int column) {
            if (cellSelectionSet.containsOneOrLess()) {
                // show the default
                return super.isCellSelected(row, column);
            }
            return cellSelectionSet.contains(row, column);
        }
 
    };
 
}

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


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

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

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