GNU Classpath (0.18) | ||
Frames | No Frames |
1: /* CellRendererPane.java -- 2: Copyright (C) 2002, 2004 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: 39: package javax.swing; 40: 41: import java.awt.Component; 42: import java.awt.Container; 43: import java.awt.Graphics; 44: import java.awt.Rectangle; 45: 46: import javax.accessibility.Accessible; 47: import javax.accessibility.AccessibleContext; 48: import javax.accessibility.AccessibleRole; 49: 50: /** 51: * Paints the cells of JList, JTable and JTree. 52: * It intercepts the usual paint tree, so that we don't walk up and 53: * repaint everything. 54: * 55: * @author Andrew Selkirk 56: */ 57: public class CellRendererPane 58: extends Container 59: implements Accessible 60: { 61: private static final long serialVersionUID = -7642183829532984273L; 62: 63: /** 64: * Provides accessibility support for CellRendererPanes. 65: */ 66: protected class AccessibleCellRendererPane extends AccessibleAWTContainer 67: { 68: private static final long serialVersionUID = -8981090083147391074L; 69: 70: /** 71: * Constructor AccessibleCellRendererPane 72: */ 73: protected AccessibleCellRendererPane() 74: { 75: } 76: 77: /** 78: * getAccessibleRole 79: * @returns AccessibleRole 80: */ 81: public AccessibleRole getAccessibleRole() 82: { 83: return AccessibleRole.PANEL; 84: } 85: } 86: 87: /** 88: * accessibleContext 89: */ 90: protected AccessibleContext accessibleContext = null; 91: 92: 93: //------------------------------------------------------------- 94: // Initialization --------------------------------------------- 95: //------------------------------------------------------------- 96: 97: /** 98: * Constructs a new CellRendererPane. 99: */ 100: public CellRendererPane() 101: { 102: } // CellRendererPane() 103: 104: 105: //------------------------------------------------------------- 106: // Methods ---------------------------------------------------- 107: //------------------------------------------------------------- 108: 109: /** 110: * Should not be called. 111: * 112: * @param graphics not used here 113: */ 114: public void update(Graphics graphics) 115: { 116: } // update() 117: 118: /** 119: * Despite normal behaviour this does <em>not</em> cause the container 120: * to be invalidated. This prevents propagating up the paint tree. 121: */ 122: public void invalidate() 123: { 124: } // invalidate() 125: 126: /** 127: * Should not be called. 128: * 129: * @param graphics not used here 130: */ 131: public void paint(Graphics graphics) 132: { 133: } 134: 135: /** 136: * Overridden to check if a component is already a child of this Container. 137: * If it's already a child, nothing is done. Otherwise we pass this to 138: * <code>super.addImpl()</code>. 139: * 140: * @param c the component to add 141: * @param constraints not used here 142: * @param index not used here 143: */ 144: protected void addImpl(Component c, Object constraints, int index) 145: { 146: if (!isAncestorOf(c)) 147: { 148: super.addImpl(c, constraints, index); 149: } 150: } // addImpl() 151: 152: /** 153: * Paints the specified component <code>c</code> on the {@link Graphics} 154: * context <code>graphics</code>. The Graphics context is tranlated to 155: * (x,y) and the components bounds are set to (w,h). If 156: * <code>shouldValidate</code> 157: * is set to true, then the component is validated before painting. 158: * 159: * @param graphics the graphics context to paint on 160: * @param c the component to be painted 161: * @param p the parent of the component 162: * @param x the X coordinate of the upper left corner where c should 163: be painted 164: * @param y the Y coordinate of the upper left corner where c should 165: be painted 166: * @param w the width of the components drawing area 167: * @param h the height of the components drawing area 168: * @param shouldValidate if <code>c</code> should be validated before 169: * painting 170: */ 171: public void paintComponent(Graphics graphics, Component c, 172: Container p, int x, int y, int w, int h, 173: boolean shouldValidate) 174: { 175: // reparent c 176: addImpl(c, null, 0); 177: 178: // translate to (x,y) 179: graphics.translate(x, y); 180: 181: // set bounds of c 182: c.setBounds(0, 0, w, h); 183: 184: // validate if necessary 185: if (shouldValidate) 186: { 187: c.validate(); 188: } 189: 190: // paint component 191: c.paint(graphics); 192: 193: // untranslate g 194: graphics.translate(-x, -y); 195: 196: } // paintComponent() 197: 198: /** 199: * Paints the specified component <code>c</code> on the {@link Graphics} 200: * context <code>graphics</code>. The Graphics context is tranlated to (x,y) 201: * and the components bounds are set to (w,h). The component is <em>not</em> 202: * validated before painting. 203: * 204: * @param graphics the graphics context to paint on 205: * @param c the component to be painted 206: * @param p the parent of the component 207: * @param x the X coordinate of the upper left corner where c should 208: be painted 209: * @param y the Y coordinate of the upper left corner where c should 210: be painted 211: * @param w the width of the components drawing area 212: * @param h the height of the components drawing area 213: */ 214: public void paintComponent(Graphics graphics, Component c, 215: Container p, int x, int y, int w, int h) 216: { 217: paintComponent(graphics, c, p, x, y, w, h, false); 218: } // paintComponent() 219: 220: /** 221: * Paints the specified component <code>c</code> on the {@link Graphics} 222: * context <code>g</code>. The Graphics context is tranlated to (r.x,r.y) and 223: * the components bounds are set to (r.width,r.height). 224: * The component is <em>not</em> 225: * validated before painting. 226: * 227: * @param graphics the graphics context to paint on 228: * @param c the component to be painted 229: * @param p the component on which we paint 230: * @param r the bounding rectangle of c 231: */ 232: public void paintComponent(Graphics graphics, Component c, 233: Container p, Rectangle r) 234: { 235: paintComponent(graphics, c, p, r.x, r.y, r.width, r.height); 236: } // paintComponent() 237: 238: /** 239: * getAccessibleContext <em>TODO</em> 240: * @return AccessibleContext 241: */ 242: public AccessibleContext getAccessibleContext() 243: { 244: if (accessibleContext == null) 245: accessibleContext = new AccessibleCellRendererPane(); 246: 247: return accessibleContext; 248: } 249: }
GNU Classpath (0.18) |