All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jgoodies.forms.debug.FormDebugPanel Maven / Gradle / Ivy

Go to download

The JGoodies Forms framework helps you lay out and implement elegant Swing panels quickly and consistently. It makes simple things easy and the hard stuff possible, the good design easy and the bad difficult.

There is a newer version: 1.9.0
Show newest version
/*
 * Copyright (c) 2002-2014 JGoodies Software GmbH. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  o Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 *  o Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 *  o Neither the name of JGoodies Software GmbH nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package com.jgoodies.forms.debug;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

import com.jgoodies.forms.layout.FormLayout;


/**
 * A panel that paints grid bounds if and only if the panel's layout manager
 * is a {@link FormLayout}. You can tweak the debug paint process by setting
 * a custom grid color, painting optional diagonals and painting the grid
 * in the background or foreground.

* * This class is not intended to be extended. However, it is not * marked as {@code final} to allow users to subclass it for * debugging purposes. In general it is recommended to use JPanel * instances, not extend them. You can see this implementation style * in the Forms tutorial classes. Rarely there's a need to extend JPanel; * for example if you provide a custom behavior for * {@code #paintComponent} or {@code #updateUI}. * * @author Karsten Lentzsch * @version $Revision: 1.10 $ * * @see FormDebugUtils */ public class FormDebugPanel extends JPanel { public static boolean paintRowsDefault = true; /** * The default color used to paint the form's debug grid. */ private static final Color DEFAULT_GRID_COLOR = Color.red; /** * Specifies whether the grid shall be painted in the background. * Is off by default and so the grid is painted in the foreground. */ private boolean paintInBackground; /** * Specifies whether the container's diagonals should be painted. */ private boolean paintDiagonals; /** * Specifies whether all rows shall be painted. Enabled by default. */ private boolean paintRows = paintRowsDefault; /** * Holds the color used to paint the debug grid. */ private Color gridColor = DEFAULT_GRID_COLOR; // Instance Creation **************************************************** /** * Constructs a FormDebugPanel with all options turned off. */ public FormDebugPanel() { this(null); } /** * Constructs a FormDebugPanel on the given FormLayout instance * that paints the grid in the foreground and paints no diagonals. * * @param layout the panel's FormLayout instance */ public FormDebugPanel(FormLayout layout) { this(layout, false, false); } /** * Constructs a FormDebugPanel on the given FormLayout * using the specified settings that are otherwise turned off. * * @param paintInBackground * true to paint grid lines in the background, * false to paint the grid in the foreground * @param paintDiagonals * true to paint diagonals, * false to not paint them */ public FormDebugPanel(boolean paintInBackground, boolean paintDiagonals) { this(null, paintInBackground, paintDiagonals); } /** * Constructs a FormDebugPanel on the given FormLayout using * the specified settings that are otherwise turned off. * * @param layout * the panel's FormLayout instance * @param paintInBackground * true to paint grid lines in the background, * false to paint the grid in the foreground * @param paintDiagonals * true to paint diagonals, * false to not paint them */ public FormDebugPanel(FormLayout layout, boolean paintInBackground, boolean paintDiagonals) { super(layout); setPaintInBackground(paintInBackground); setPaintDiagonals(paintDiagonals); setGridColor(DEFAULT_GRID_COLOR); } // Accessors ************************************************************ /** * Specifies to paint in background or foreground. * * @param b true to paint in the background, false for the foreground */ public void setPaintInBackground(boolean b) { paintInBackground = b; } /** * Enables or disables to paint the panel's diagonals. * * @param b true to paint diagonals, false to not paint them */ public void setPaintDiagonals(boolean b) { paintDiagonals = b; } /** * Enables or disables painting of rows. Enabled by default. * Note that the top and bottom are always painted. * * @param b true to paint all rows, false to paint only the top and * bottom */ public void setPaintRows(boolean b) { paintRows = b; } /** * Sets the debug grid's color. * * @param color the color used to paint the debug grid */ public void setGridColor(Color color) { gridColor = color; } // Painting ************************************************************* /** * Paints the component and - if background painting is enabled - the grid. * If foreground painting is enabled, the grid will be painted in * {@code #paint}. * * @param g the Graphics object to paint on * * @see #paint(Graphics) */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (paintInBackground) { paintGrid(g); } } /** * Paints the panel. If the panel's layout manager is a FormLayout * and foreground painting is enabled, it paints the form's grid lines. * If the grid shall be painted in the background, the grid will be * painted in {@code #paintComponent}. * * @param g the Graphics object to paint on * * @see #paintComponent(Graphics) */ @Override public void paint(Graphics g) { super.paint(g); if (!paintInBackground) { paintGrid(g); } } /** * Paints the form's grid lines and diagonals. * * @param g the Graphics object used to paint */ private void paintGrid(Graphics g) { if (!(getLayout() instanceof FormLayout)) { return; } FormLayout.LayoutInfo layoutInfo = FormDebugUtils.getLayoutInfo(this); int left = layoutInfo.getX(); int top = layoutInfo.getY(); int width = layoutInfo.getWidth(); int height = layoutInfo.getHeight(); g.setColor(gridColor); // Paint the column bounds. int last = layoutInfo.columnOrigins.length - 1; for (int col = 0; col <= last; col++) { boolean firstOrLast = (col == 0) || (col == last); int x = layoutInfo.columnOrigins[col]; int start = firstOrLast ? 0 : top; int stop = firstOrLast ? getHeight() : (top + height); for (int i = start; i < stop; i += 5) { int length = Math.min(3, stop - i); g.fillRect(x, i, 1, length); } } // Paint the row bounds. last = layoutInfo.rowOrigins.length - 1; for (int row = 0; row <= last; row++) { boolean firstOrLast = (row == 0) || (row == last); int y = layoutInfo.rowOrigins[row]; int start = firstOrLast ? 0 : left; int stop = firstOrLast ? getWidth() : (left + width); if (firstOrLast || paintRows) { for (int i = start; i < stop; i += 5) { int length = Math.min(3, stop - i); g.fillRect(i, y, length, 1); } } } if (paintDiagonals) { g.drawLine(left, top, left + width, top + height); g.drawLine(left, top + height, left + width, top); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy