📄 arcdialframe.java
字号:
*
* @see #getOuterRadius()
*/
public void setOuterRadius(double radius) {
if (radius < 0.0) {
throw new IllegalArgumentException("Negative 'radius' argument.");
}
this.outerRadius = radius;
notifyListeners(new DialLayerChangeEvent(this));
}
/**
* Returns the start angle.
*
* @return The start angle.
*
* @see #setStartAngle(double)
*/
public double getStartAngle() {
return this.startAngle;
}
/**
* Sets the start angle and sends a {@link DialLayerChangeEvent} to
* all registered listeners.
*
* @param angle the angle.
*
* @see #getStartAngle()
*/
public void setStartAngle(double angle) {
this.startAngle = angle;
notifyListeners(new DialLayerChangeEvent(this));
}
/**
* Returns the extent.
*
* @return The extent.
*
* @see #setExtent(double)
*/
public double getExtent() {
return this.extent;
}
/**
* Sets the extent and sends a {@link DialLayerChangeEvent} to
* all registered listeners.
*
* @param extent the extent.
*
* @see #getExtent()
*/
public void setExtent(double extent) {
this.extent = extent;
notifyListeners(new DialLayerChangeEvent(this));
}
/**
* Returns the shape for the window for this dial. Some dial layers will
* request that their drawing be clipped within this window.
*
* @param frame the reference frame (<code>null</code> not permitted).
*
* @return The shape of the dial's window.
*/
public Shape getWindow(Rectangle2D frame) {
Rectangle2D innerFrame = DialPlot.rectangleByRadius(frame,
this.innerRadius, this.innerRadius);
Rectangle2D outerFrame = DialPlot.rectangleByRadius(frame,
this.outerRadius, this.outerRadius);
Arc2D inner = new Arc2D.Double(innerFrame, this.startAngle,
this.extent, Arc2D.OPEN);
Arc2D outer = new Arc2D.Double(outerFrame, this.startAngle
+ this.extent, -this.extent, Arc2D.OPEN);
GeneralPath p = new GeneralPath();
Point2D point1 = inner.getStartPoint();
p.moveTo((float) point1.getX(), (float) point1.getY());
p.append(inner, true);
p.append(outer, true);
p.closePath();
return p;
}
/**
* Returns the outer window.
*
* @param frame the frame.
*
* @return The outer window.
*/
protected Shape getOuterWindow(Rectangle2D frame) {
double radiusMargin = 0.02;
double angleMargin = 1.5;
Rectangle2D innerFrame = DialPlot.rectangleByRadius(frame,
this.innerRadius - radiusMargin, this.innerRadius
- radiusMargin);
Rectangle2D outerFrame = DialPlot.rectangleByRadius(frame,
this.outerRadius + radiusMargin, this.outerRadius
+ radiusMargin);
Arc2D inner = new Arc2D.Double(innerFrame, this.startAngle
- angleMargin, this.extent + 2 * angleMargin, Arc2D.OPEN);
Arc2D outer = new Arc2D.Double(outerFrame, this.startAngle
+ angleMargin + this.extent, -this.extent - 2 * angleMargin,
Arc2D.OPEN);
GeneralPath p = new GeneralPath();
Point2D point1 = inner.getStartPoint();
p.moveTo((float) point1.getX(), (float) point1.getY());
p.append(inner, true);
p.append(outer, true);
p.closePath();
return p;
}
/**
* Draws the frame.
*
* @param g2 the graphics target.
* @param plot the plot.
* @param frame the dial's reference frame.
* @param view the dial's view rectangle.
*/
public void draw(Graphics2D g2, DialPlot plot, Rectangle2D frame,
Rectangle2D view) {
Shape window = getWindow(frame);
Shape outerWindow = getOuterWindow(frame);
Area area1 = new Area(outerWindow);
Area area2 = new Area(window);
area1.subtract(area2);
g2.setPaint(Color.lightGray);
g2.fill(area1);
g2.setStroke(this.stroke);
g2.setPaint(this.foregroundPaint);
g2.draw(window);
g2.draw(outerWindow);
}
/**
* Returns <code>false</code> to indicate that this dial layer is not
* clipped to the dial window.
*
* @return <code>false</code>.
*/
public boolean isClippedToWindow() {
return false;
}
/**
* Tests this instance for equality with an arbitrary object.
*
* @param obj the object (<code>null</code> permitted).
*
* @return A boolean.
*/
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof ArcDialFrame)) {
return false;
}
ArcDialFrame that = (ArcDialFrame) obj;
if (!PaintUtilities.equal(this.backgroundPaint, that.backgroundPaint)) {
return false;
}
if (!PaintUtilities.equal(this.foregroundPaint, that.foregroundPaint)) {
return false;
}
if (this.startAngle != that.startAngle) {
return false;
}
if (this.extent != that.extent) {
return false;
}
if (this.innerRadius != that.innerRadius) {
return false;
}
if (this.outerRadius != that.outerRadius) {
return false;
}
if (!this.stroke.equals(that.stroke)) {
return false;
}
return super.equals(obj);
}
/**
* Returns a hash code for this instance.
*
* @return The hash code.
*/
public int hashCode() {
int result = 193;
long temp = Double.doubleToLongBits(this.startAngle);
result = 37 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(this.extent);
result = 37 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(this.innerRadius);
result = 37 * result + (int) (temp ^ (temp >>> 32));
temp = Double.doubleToLongBits(this.outerRadius);
result = 37 * result + (int) (temp ^ (temp >>> 32));
result = 37 * result + HashUtilities.hashCodeForPaint(
this.backgroundPaint);
result = 37 * result + HashUtilities.hashCodeForPaint(
this.foregroundPaint);
result = 37 * result + this.stroke.hashCode();
return result;
}
/**
* Returns a clone of this instance.
*
* @return A clone.
*
* @throws CloneNotSupportedException if any attribute of this instance
* cannot be cloned.
*/
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
/**
* Provides serialization support.
*
* @param stream the output stream.
*
* @throws IOException if there is an I/O error.
*/
private void writeObject(ObjectOutputStream stream) throws IOException {
stream.defaultWriteObject();
SerialUtilities.writePaint(this.backgroundPaint, stream);
SerialUtilities.writePaint(this.foregroundPaint, stream);
SerialUtilities.writeStroke(this.stroke, 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(ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
this.backgroundPaint = SerialUtilities.readPaint(stream);
this.foregroundPaint = SerialUtilities.readPaint(stream);
this.stroke = SerialUtilities.readStroke(stream);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -