Выделение ячейки в JTable - Java
Формулировка задачи:
Есть задание сделать что-то вроде электронной таблицы. Обработчик выражений сделал, а вот с интерфейсом проблемы.
Проблема в следующем: мне нужно, чтобы можно было выделять только ячейку, без столбца и ряда.
Если использовать:
Тогда выделение происходит одной ячейки, но когда выбираю несколько, зажав Ctrl - выделяются несколько на одной линии, либо по диагонали.
Очень нужна подсказка, чтоб это решить.
Листинг программы
- table.setColumnSelectionAllowed(true);
- table.setRowSelectionAllowed(true);
Решение задачи: «Выделение ячейки в 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);
- }
- };
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д