org.jfree.text.TextBox Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jtstand-common Show documentation
Show all versions of jtstand-common Show documentation
jtstand-common is a library derived from jcommon, used by jtstand-chart, which is derived from jfreechart
/*
* Copyright (c) 2009 Albert Kurucz.
*
* This file, TextBox.java is part of JTStand.
*
* JTStand is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JTStand is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with GTStand. If not, see .
*/
package org.jfree.text;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import org.jfree.io.SerialUtilities;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.Size2D;
import org.jfree.util.ObjectUtilities;
/**
* A box containing a text block.
*
* @author David Gilbert
*/
public class TextBox implements Serializable {
/** For serialization. */
private static final long serialVersionUID = 3360220213180203706L;
/** The outline paint. */
private transient Paint outlinePaint;
/** The outline stroke. */
private transient Stroke outlineStroke;
/** The interior space. */
private RectangleInsets interiorGap;
/** The background paint. */
private transient Paint backgroundPaint;
/** The shadow paint. */
private transient Paint shadowPaint;
/** The shadow x-offset. */
private double shadowXOffset = 2.0;
/** The shadow y-offset. */
private double shadowYOffset = 2.0;
/** The text block. */
private TextBlock textBlock;
/**
* Creates an empty text box.
*/
public TextBox() {
this((TextBlock) null);
}
/**
* Creates a text box.
*
* @param text the text.
*/
public TextBox(final String text) {
this((TextBlock) null);
if (text != null) {
this.textBlock = new TextBlock();
this.textBlock.addLine(
text, new Font("SansSerif", Font.PLAIN, 10),
Color.black
);
}
}
/**
* Creates a new text box.
*
* @param block the text block.
*/
public TextBox(final TextBlock block) {
this.outlinePaint = Color.black;
this.outlineStroke = new BasicStroke(1.0f);
this.interiorGap = new RectangleInsets(1.0, 3.0, 1.0, 3.0);
this.backgroundPaint = new Color(255, 255, 192);
this.shadowPaint = Color.gray;
this.shadowXOffset = 2.0;
this.shadowYOffset = 2.0;
this.textBlock = block;
}
/**
* Returns the outline paint.
*
* @return The outline paint.
*/
public Paint getOutlinePaint() {
return this.outlinePaint;
}
/**
* Sets the outline paint.
*
* @param paint the paint.
*/
public void setOutlinePaint(final Paint paint) {
this.outlinePaint = paint;
}
/**
* Returns the outline stroke.
*
* @return The outline stroke.
*/
public Stroke getOutlineStroke() {
return this.outlineStroke;
}
/**
* Sets the outline stroke.
*
* @param stroke the stroke.
*/
public void setOutlineStroke(final Stroke stroke) {
this.outlineStroke = stroke;
}
/**
* Returns the interior gap.
*
* @return The interior gap.
*/
public RectangleInsets getInteriorGap() {
return this.interiorGap;
}
/**
* Sets the interior gap.
*
* @param gap the gap.
*/
public void setInteriorGap(final RectangleInsets gap) {
this.interiorGap = gap;
}
/**
* Returns the background paint.
*
* @return The background paint.
*/
public Paint getBackgroundPaint() {
return this.backgroundPaint;
}
/**
* Sets the background paint.
*
* @param paint the paint.
*/
public void setBackgroundPaint(final Paint paint) {
this.backgroundPaint = paint;
}
/**
* Returns the shadow paint.
*
* @return The shadow paint.
*/
public Paint getShadowPaint() {
return this.shadowPaint;
}
/**
* Sets the shadow paint.
*
* @param paint the paint.
*/
public void setShadowPaint(final Paint paint) {
this.shadowPaint = paint;
}
/**
* Returns the x-offset for the shadow effect.
*
* @return The offset.
*/
public double getShadowXOffset() {
return this.shadowXOffset;
}
/**
* Sets the x-offset for the shadow effect.
*
* @param offset the offset (in Java2D units).
*/
public void setShadowXOffset(final double offset) {
this.shadowXOffset = offset;
}
/**
* Returns the y-offset for the shadow effect.
*
* @return The offset.
*/
public double getShadowYOffset() {
return this.shadowYOffset;
}
/**
* Sets the y-offset for the shadow effect.
*
* @param offset the offset (in Java2D units).
*/
public void setShadowYOffset(final double offset) {
this.shadowYOffset = offset;
}
/**
* Returns the text block.
*
* @return The text block.
*/
public TextBlock getTextBlock() {
return this.textBlock;
}
/**
* Sets the text block.
*
* @param block the block.
*/
public void setTextBlock(final TextBlock block) {
this.textBlock = block;
}
/**
* Draws the text box.
*
* @param g2 the graphics device.
* @param x the x-coordinate.
* @param y the y-coordinate.
* @param anchor the anchor point.
*/
public void draw(final Graphics2D g2,
final float x, final float y,
final RectangleAnchor anchor) {
final Size2D d1 = this.textBlock.calculateDimensions(g2);
final double w = this.interiorGap.extendWidth(d1.getWidth());
final double h = this.interiorGap.extendHeight(d1.getHeight());
final Size2D d2 = new Size2D(w, h);
final Rectangle2D bounds
= RectangleAnchor.createRectangle(d2, x, y, anchor);
double xx = bounds.getX();
double yy = bounds.getY();
if (this.shadowPaint != null) {
final Rectangle2D shadow = new Rectangle2D.Double(
xx + this.shadowXOffset, yy + this.shadowYOffset,
bounds.getWidth(), bounds.getHeight());
g2.setPaint(this.shadowPaint);
g2.fill(shadow);
}
if (this.backgroundPaint != null) {
g2.setPaint(this.backgroundPaint);
g2.fill(bounds);
}
if (this.outlinePaint != null && this.outlineStroke != null) {
g2.setPaint(this.outlinePaint);
g2.setStroke(this.outlineStroke);
g2.draw(bounds);
}
this.textBlock.draw(g2,
(float) (xx + this.interiorGap.calculateLeftInset(w)),
(float) (yy + this.interiorGap.calculateTopInset(h)),
TextBlockAnchor.TOP_LEFT);
}
/**
* Returns the height of the text box.
*
* @param g2 the graphics device.
*
* @return The height (in Java2D units).
*/
public double getHeight(final Graphics2D g2) {
final Size2D d = this.textBlock.calculateDimensions(g2);
return this.interiorGap.extendHeight(d.getHeight());
}
/**
* Tests this object for equality with an arbitrary object.
*
* @param obj the object to test against (null
permitted).
*
* @return A boolean.
*/
public boolean equals(final Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof TextBox)) {
return false;
}
final TextBox that = (TextBox) obj;
if (!ObjectUtilities.equal(this.outlinePaint, that.outlinePaint)) {
return false;
}
if (!ObjectUtilities.equal(this.outlineStroke, that.outlineStroke)) {
return false;
}
if (!ObjectUtilities.equal(this.interiorGap, that.interiorGap)) {
return false;
}
if (!ObjectUtilities.equal(this.backgroundPaint,
that.backgroundPaint)) {
return false;
}
if (!ObjectUtilities.equal(this.shadowPaint, that.shadowPaint)) {
return false;
}
if (this.shadowXOffset != that.shadowXOffset) {
return false;
}
if (this.shadowYOffset != that.shadowYOffset) {
return false;
}
if (!ObjectUtilities.equal(this.textBlock, that.textBlock)) {
return false;
}
return true;
}
/**
* Returns a hash code for this object.
*
* @return A hash code.
*/
public int hashCode() {
int result;
long temp;
result = (this.outlinePaint != null ? this.outlinePaint.hashCode() : 0);
result = 29 * result + (this.outlineStroke != null
? this.outlineStroke.hashCode() : 0);
result = 29 * result + (this.interiorGap != null
? this.interiorGap.hashCode() : 0);
result = 29 * result + (this.backgroundPaint != null
? this.backgroundPaint.hashCode() : 0);
result = 29 * result + (this.shadowPaint != null
? this.shadowPaint.hashCode() : 0);
temp = this.shadowXOffset != +0.0d
? Double.doubleToLongBits(this.shadowXOffset) : 0L;
result = 29 * result + (int) (temp ^ (temp >>> 32));
temp = this.shadowYOffset != +0.0d
? Double.doubleToLongBits(this.shadowYOffset) : 0L;
result = 29 * result + (int) (temp ^ (temp >>> 32));
result = 29 * result + (this.textBlock != null
? this.textBlock.hashCode() : 0);
return result;
}
/**
* Provides serialization support.
*
* @param stream the output stream.
*
* @throws IOException if there is an I/O error.
*/
private void writeObject(final ObjectOutputStream stream)
throws IOException {
stream.defaultWriteObject();
SerialUtilities.writePaint(this.outlinePaint, stream);
SerialUtilities.writeStroke(this.outlineStroke, stream);
SerialUtilities.writePaint(this.backgroundPaint, stream);
SerialUtilities.writePaint(this.shadowPaint, stream);
}
/**
* Provides serialization support.
*
* @param stream the input stream.
*
* @throws IOException if there is an I/O error.
* @throws ClassNotFoundException if there is a classpath problem.
*/
private void readObject(final ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
this.outlinePaint = SerialUtilities.readPaint(stream);
this.outlineStroke = SerialUtilities.readStroke(stream);
this.backgroundPaint = SerialUtilities.readPaint(stream);
this.shadowPaint = SerialUtilities.readPaint(stream);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy