Выделение ячейки в 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);
}
};
}