001 /*
002 * Copyright 2002-2004 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.util;
017
018 import java.awt.Color;
019 import java.awt.Graphics;
020 import java.awt.GridBagLayout;
021 import java.awt.Point;
022
023 import javax.swing.JPanel;
024
025 /**
026 * A useful class for debugging layout problems when using {@link GridBagLayout}.
027 * When it is displayed, "guidelines" are shown.
028 */
029 public class GridBagLayoutDebugPanel extends JPanel {
030 private Color gridColor = Color.red;
031
032 public GridBagLayoutDebugPanel() {
033 super(new GridBagLayout());
034 }
035
036 /**
037 * Change the color used for painting the guidelines
038 *
039 * @param color
040 * defaults to {@link Color#red}
041 */
042 public void setGridColor(Color color) {
043 gridColor = color;
044 }
045
046 protected void paintComponent(Graphics g) {
047 super.paintComponent(g);
048 paintGrid(g);
049 }
050
051 private void paintGrid(Graphics g) {
052 if (!(getLayout() instanceof GridBagLayout))
053 return;
054
055 final GridBagLayout layout = (GridBagLayout)getLayout();
056 final int[][] layoutDimensions = layout.getLayoutDimensions();
057 final int[] columnWidths = layoutDimensions[0];
058 final int[] rowHeights = layoutDimensions[1];
059 final Point layoutOrigin = layout.getLayoutOrigin();
060 final int left = layoutOrigin.x;
061 final int top = layoutOrigin.y;
062 g.setColor(gridColor);
063
064 int width = 0;
065 for (int i = 0; i < columnWidths.length; i++) {
066 width += columnWidths[i];
067 }
068
069 int height = 0;
070 for (int i = 0; i < rowHeights.length; i++) {
071 height += rowHeights[i];
072 }
073
074 int x = left;
075 for (int i = 0; i < columnWidths.length; i++) {
076 x += columnWidths[i];
077 g.fillRect(x, top, 1, height);
078 }
079
080 int y = top;
081 for (int i = 0; i < rowHeights.length; i++) {
082 y += rowHeights[i];
083 g.fillRect(left, y, width, 1);
084 }
085 }
086
087 }