summaryrefslogtreecommitdiff
path: root/javax/swing/plaf/basic/BasicTableUI.java
diff options
context:
space:
mode:
Diffstat (limited to 'javax/swing/plaf/basic/BasicTableUI.java')
-rw-r--r--javax/swing/plaf/basic/BasicTableUI.java102
1 files changed, 58 insertions, 44 deletions
diff --git a/javax/swing/plaf/basic/BasicTableUI.java b/javax/swing/plaf/basic/BasicTableUI.java
index 4d9b5a629..8360a9ec7 100644
--- a/javax/swing/plaf/basic/BasicTableUI.java
+++ b/javax/swing/plaf/basic/BasicTableUI.java
@@ -57,14 +57,12 @@ import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
-import javax.swing.CellEditor;
import javax.swing.CellRendererPane;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultListSelectionModel;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JTable;
-import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.LookAndFeel;
@@ -78,7 +76,6 @@ import javax.swing.plaf.InputMapUIResource;
import javax.swing.plaf.TableUI;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
-import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
@@ -1222,6 +1219,9 @@ public class BasicTableUI extends TableUI
rendererPane.paintComponent(g, comp, table, bounds);
}
+ /**
+ * Paint the associated table.
+ */
public void paint(Graphics gfx, JComponent ignored)
{
int ncols = table.getColumnCount();
@@ -1230,58 +1230,72 @@ public class BasicTableUI extends TableUI
return;
Rectangle clip = gfx.getClipBounds();
- TableColumnModel cols = table.getColumnModel();
-
- int height = table.getRowHeight() + table.getRowMargin();
- int x0 = 0, y0 = 0;
- int x = x0;
- int y = y0;
- Dimension gap = table.getIntercellSpacing();
- int ymax = clip.y + clip.height;
- int xmax = clip.x + clip.width;
- Rectangle bounds = new Rectangle();
+ // Determine the range of cells that are within the clip bounds.
+ Point p1 = new Point(clip.x, clip.y);
+ int c0 = table.columnAtPoint(p1);
+ if (c0 == -1)
+ c0 = 0;
+ int r0 = table.rowAtPoint(p1);
+ if (r0 == -1)
+ r0 = 0;
+ Point p2 = new Point(clip.x + clip.width, clip.y + clip.height);
+ int cn = table.columnAtPoint(p2);
+ if (cn == -1)
+ cn = table.getColumnCount() - 1;
+ int rn = table.rowAtPoint(p2);
+ if (rn == -1)
+ rn = table.getRowCount() - 1;
+
+ TableColumnModel cmodel = table.getColumnModel();
+ int [] widths = new int[cn+1];
+ for (int i = c0; i <=cn ; i++)
+ {
+ widths[i] = cmodel.getColumn(i).getWidth();
+ }
+
+ Rectangle bounds = table.getCellRect(r0, c0, false);
+ bounds.height = table.getRowHeight()+table.getRowMargin();
+
+ // The left boundary of the area being repainted.
+ int left = bounds.x;
+
+ // The top boundary of the area being repainted.
+ int top = bounds.y;
+
+ // The bottom boundary of the area being repainted.
+ int bottom;
+
+ // The cell height.
+ int height = bounds.height;
// paint the cell contents
- for (int c = 0; c < ncols && x < xmax; ++c)
+ Color grid = table.getGridColor();
+ for (int r = r0; r <= rn; ++r)
{
- y = y0;
- TableColumn col = cols.getColumn(c);
- int width = col.getWidth();
- int halfGapWidth = gap.width / 2;
- int halfGapHeight = gap.height / 2;
-
- for (int r = 0; r < nrows && y < ymax; ++r)
+ for (int c = c0; c <= cn; ++c)
{
- bounds.x = x + halfGapWidth;
- bounds.y = y + halfGapHeight + 1;
- bounds.width = width - gap.width + 1;
- bounds.height = height - gap.height;
- if (bounds.intersects(clip))
- {
- paintCell(gfx, r, c, bounds, table.getCellRenderer(r, c));
- }
- y += height;
+ bounds.width = widths[c];
+ paintCell(gfx, r, c, bounds, table.getCellRenderer(r, c));
+ bounds.x += widths[c];
}
- x += width;
+ bounds.y += height;
+ bounds.x = left;
}
-
- // tighten up the x and y max bounds
- ymax = y;
- xmax = x;
-
- Color grid = table.getGridColor();
+
+ bottom = bounds.y;
// paint vertical grid lines
if (grid != null && table.getShowVerticalLines())
{
- x = x0;
Color save = gfx.getColor();
gfx.setColor(grid);
- for (int c = 0; c < ncols && x < xmax; ++c)
+ int x = left;
+
+ for (int c = c0; c <= cn; ++c)
{
- x += cols.getColumn(c).getWidth();
- gfx.drawLine(x, y0, x, ymax);
+ gfx.drawLine(x, top, x, bottom);
+ x += widths[c];
}
gfx.setColor(save);
}
@@ -1289,13 +1303,13 @@ public class BasicTableUI extends TableUI
// paint horizontal grid lines
if (grid != null && table.getShowHorizontalLines())
{
- y = y0;
Color save = gfx.getColor();
gfx.setColor(grid);
- for (int r = 0; r < nrows && y < ymax; ++r)
+ int y = top;
+ for (int r = r0; r <= rn; ++r)
{
+ gfx.drawLine(left, y, p2.x, y);
y += height;
- gfx.drawLine(x0, y, xmax, y);
}
gfx.setColor(save);
}