public void actionPerformed(ActionEvent e) { JGrid grid = (JGrid) e.getSource(); if (toLimit) { if (vertically) { int rowCount = grid.getRowCount(); this.dx = 0; this.dy = forwards ? rowCount : -rowCount; } else { int colCount = grid.getColumnCount(); this.dx = forwards ? colCount : -colCount; this.dy = 0; } } else { if (!(grid.getParent().getParent() instanceof JScrollPane)) { return; } Dimension delta = grid.getParent().getSize(); SelectionModel sm = grid.getSelectionModel(); int start = 0; if (vertically) { start = (extend) ? sm.getLeadRow() : sm.getAnchorRow(); } else { start = (extend) ? sm.getLeadColumn() : sm.getAnchorColumn(); } if (vertically) { Rectangle r = grid.getCellBounds(start, 0); r.y += forwards ? delta.height : -delta.height; this.dx = 0; int newRow = grid.rowAtPoint(r.getLocation()); if (newRow == -1 && forwards) { newRow = grid.getRowCount(); } this.dy = newRow - start; } else { Rectangle r = grid.getCellBounds(0, start); r.x += forwards ? delta.width : -delta.width; int newColumn = grid.columnAtPoint(r.getLocation()); if (newColumn == -1 && forwards) { newColumn = grid.getColumnCount(); } this.dx = newColumn - start; this.dy = 0; } } super.actionPerformed(e); }
protected void paintEditor(Graphics g) { Component component = grid.getEditorComponent(); if (component == null) { return; } Rectangle cellBounds = grid.getCellBounds(grid.getEditingRow(), grid.getEditingColumn()); component.setBounds(cellBounds); component.validate(); component.requestFocus(); }
public Dimension getMaximumSize(JComponent c) { int lastRow = grid.getRowCount() - 1; int lastCol = grid.getColumnCount() - 1; Rectangle cellBounds = grid.getCellBounds(lastRow, lastCol); int width = cellBounds.x + cellBounds.width; int height = cellBounds.y + cellBounds.height; return new Dimension(width, height); }
protected void paintCells(Graphics g, int rowMin, int rowMax, int colMin, int colMax) { for (int row = rowMin; row <= rowMax; row++) { for (int column = colMin; column <= colMax; column++) { /* Paint cell if it is atomic */ if (!grid.isCellSpan(row, column)) { Rectangle cellBounds = grid.getCellBounds(row, column); paintCell(g, cellBounds, row, column); } } } }
/* * Borders are handled by the UI since they are shared between cells * and therefore must overlay after the painting of the cells */ private void paintBorders(Graphics g, int rowMin, int rowMax, int colMin, int colMax) { // Include borders from adjacent rows/columns of the clip region rowMin = Math.max(0, rowMin - 1); rowMax = Math.min(grid.getRowCount() - 1, rowMax + 1); colMin = Math.max(0, colMin - 1); colMax = Math.min(grid.getColumnCount() - 1, colMax + 1); for (int row = rowMin; row <= rowMax; row++) { for (int column = colMin; column <= colMax; column++) { Rectangle cellRect = grid.getCellBounds(row, column); paintBorder(g, cellRect, row, column); } } }
/** special paint handler for merged cell regions */ protected void paintSpans(Graphics g, int rowMin, int rowMax, int colMin, int colMax) { Rectangle clip = g.getClipBounds(); 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); } } } }