public void paintSelection(Graphics g, int rowMin, int rowMax, int colMin, int colMax) { for (int row = rowMin; row <= rowMax; row++) { for (int column = colMin; column <= colMax; column++) { if (!grid.isCellSpan(row, column)) { Rectangle cellBounds = grid.getCellBounds(row, column); if (grid.getSelectionModel().isSelected(row, column)) { g.setColor(Color.RED); g.drawRect( (int) cellBounds.getX() + 1, (int) cellBounds.getY() + 1, (int) cellBounds.getWidth() - 2, (int) cellBounds.getHeight() - 2); } } else { CellSpan span = grid.getSpanModel().getSpanOver(row, column); if (grid.getSelectionModel().isSelected(span.getRow(), span.getColumn())) { g.setColor(Color.RED); Rectangle cellBounds = grid.getCellBounds(span.getFirstRow(), span.getLastColumn()); g.drawRect( (int) cellBounds.getX() + 1, (int) cellBounds.getY() + 1, (int) cellBounds.getWidth() - 2, (int) cellBounds.getHeight() - 2); } } } } }
public void paintSpans(Graphics g, int rowMin, int rowMax, int colMin, int colMax) { Iterator<?> cell = grid.getSpanModel().getSpanIterator(); while (cell.hasNext()) { CellSpan span = (CellSpan) cell.next(); Rectangle cellBounds = grid.getCellBounds(span.getRow(), span.getColumn()); // Only paint cell if visible if (span.getLastRow() >= rowMin && span.getLastColumn() >= colMin && span.getFirstRow() <= rowMax && span.getFirstColumn() <= colMax) { paintCell(g, cellBounds, span.getRow(), span.getColumn()); // Paint grid line around cell if (grid.getShowGrid()) { g.setColor(grid.getGridColor()); g.drawRect(cellBounds.x, cellBounds.y, cellBounds.width, cellBounds.height); } } } }
public void actionPerformed(ActionEvent event) { JGrid grid = (JGrid) event.getSource(); if (grid.isEditing() && !grid.getCurrentCellEditor().stopCellEditing()) { return; } SelectionModel selectionModel = grid.getSelectionModel(); List<Cell> selectedCells = selectionModel.getSelectedCells(); int selectedCount = selectedCells.size(); if (selectedCount == 0) { return; } Cell firstSelectedCell = selectionModel.getSelectedCell(); Cell lastSelectedCell = selectionModel.getLastSelectedCell(); int row = lastSelectedCell.getRow(); int column = lastSelectedCell.getColumn(); if (shiftPressed) { if (shiftRegion == null) { shiftRegion = new SelectionRegion(); shiftRegion.setFirstRow(row); shiftRegion.setFirstColumn(column); shiftRegion.setLastRow(row); shiftRegion.setLastColumn(column); } boolean nextSelection = true; if ((dx == 1) && (column < grid.getColumnCount() - 1)) { column++; } else if ((dx == -1) && (column > 0)) { column--; } else if ((dy == 1) && (row < grid.getRowCount() - 1)) { row++; } else if ((dy == -1) && (row > 0)) { row--; } else { nextSelection = false; } if (nextSelection) { GridSelectionAlgorithm selectionAlgorithm = new GridSelectionAlgorithm(grid); selectionAlgorithm.update( row, column, firstSelectedCell.getRow(), firstSelectedCell.getColumn(), lastSelectedCell.getRow(), lastSelectedCell.getColumn(), shiftRegion); selectionRegionChanged(grid, shiftRegion, false); // because the selectionModel is cleared and made from scratch // keep a reference to first and last selected cells selectionModel.setFirstCell(firstSelectedCell); selectionModel.setLastCell(new Cell(row, column)); } } else { shiftRegion = null; SpanModel spanModel = grid.getSpanModel(); if (spanModel.isCellSpan(row, column)) { CellSpan span = spanModel.getSpanOver(row, column); row = span.getRow(); column = span.getColumn(); if ((dx > 0) && (span.getColumnCount() > 1)) { column = span.getLastColumn(); } if ((dy > 0) && (span.getRowCount() > 1)) { row = span.getLastRow(); } } row = clipToRange(row + dy, 0, grid.getRowCount()); column = clipToRange(column + dx, 0, grid.getColumnCount()); selectionModel.clearSelection(); if (!grid.isCellSpan(row, column)) { selectionModel.addSelectionCell(new Cell(row, column)); } else { CellSpan span = spanModel.getSpanOver(row, column); List<Cell> cells = new ArrayList<Cell>(); for (int i = 0; i < span.getRowCount(); i++) { for (int j = 0; j < span.getColumnCount(); j++) { cells.add(new Cell(span.getRow() + i, span.getColumn() + j)); } } selectionModel.addSelectionCells(cells); } } }