📄 standarddialscale.java
字号:
this.tickLabelsVisible = visible;
notifyListeners(new DialLayerChangeEvent(this));
}
/**
* Returns the number formatter used to convert the tick label values to
* strings.
*
* @return The formatter (never <code>null</code>).
*
* @see #setTickLabelFormatter(NumberFormat)
*/
public NumberFormat getTickLabelFormatter() {
return this.tickLabelFormatter;
}
/**
* Sets the number formatter used to convert the tick label values to
* strings, and sends a {@link DialLayerChangeEvent} to all registered
* listeners.
*
* @param formatter the formatter (<code>null</code> not permitted).
*
* @see #getTickLabelFormatter()
*/
public void setTickLabelFormatter(NumberFormat formatter) {
if (formatter == null) {
throw new IllegalArgumentException("Null 'formatter' argument.");
}
this.tickLabelFormatter = formatter;
notifyListeners(new DialLayerChangeEvent(this));
}
/**
* Returns a flag that controls whether or not the first tick label is
* visible.
*
* @return A boolean.
*
* @see #setFirstTickLabelVisible(boolean)
*/
public boolean getFirstTickLabelVisible() {
return this.firstTickLabelVisible;
}
/**
* Sets a flag that controls whether or not the first tick label is
* visible, and sends a {@link DialLayerChangeEvent} to all registered
* listeners.
*
* @param visible the new flag value.
*
* @see #getFirstTickLabelVisible()
*/
public void setFirstTickLabelVisible(boolean visible) {
this.firstTickLabelVisible = visible;
notifyListeners(new DialLayerChangeEvent(this));
}
/**
* Returns <code>true</code> to indicate that this layer should be
* clipped within the dial window.
*
* @return <code>true</code>.
*/
public boolean isClippedToWindow() {
return true;
}
/**
* Draws the scale on the dial plot.
*
* @param g2 the graphics target (<code>null</code> not permitted).
* @param plot the dial plot (<code>null</code> not permitted).
* @param frame the reference frame that is used to construct the
* geometry of the plot (<code>null</code> not permitted).
* @param view the visible part of the plot (<code>null</code> not
* permitted).
*/
public void draw(Graphics2D g2, DialPlot plot, Rectangle2D frame,
Rectangle2D view) {
Rectangle2D arcRect = DialPlot.rectangleByRadius(frame,
this.tickRadius, this.tickRadius);
Rectangle2D arcRectMajor = DialPlot.rectangleByRadius(frame,
this.tickRadius - this.majorTickLength,
this.tickRadius - this.majorTickLength);
Rectangle2D arcRectMinor = arcRect;
if (this.minorTickCount > 0 && this.minorTickLength > 0.0) {
arcRectMinor = DialPlot.rectangleByRadius(frame,
this.tickRadius - this.minorTickLength,
this.tickRadius - this.minorTickLength);
}
Rectangle2D arcRectForLabels = DialPlot.rectangleByRadius(frame,
this.tickRadius - this.tickLabelOffset,
this.tickRadius - this.tickLabelOffset);
boolean firstLabel = true;
Arc2D arc = new Arc2D.Double();
Line2D workingLine = new Line2D.Double();
for (double v = this.lowerBound; v <= this.upperBound;
v += this.majorTickIncrement) {
arc.setArc(arcRect, this.startAngle, valueToAngle(v)
- this.startAngle, Arc2D.OPEN);
Point2D pt0 = arc.getEndPoint();
arc.setArc(arcRectMajor, this.startAngle, valueToAngle(v)
- this.startAngle, Arc2D.OPEN);
Point2D pt1 = arc.getEndPoint();
g2.setPaint(this.majorTickPaint);
g2.setStroke(this.majorTickStroke);
workingLine.setLine(pt0, pt1);
g2.draw(workingLine);
arc.setArc(arcRectForLabels, this.startAngle, valueToAngle(v)
- this.startAngle, Arc2D.OPEN);
Point2D pt2 = arc.getEndPoint();
if (this.tickLabelsVisible) {
if (!firstLabel || this.firstTickLabelVisible) {
g2.setFont(this.tickLabelFont);
TextUtilities.drawAlignedString(
this.tickLabelFormatter.format(v), g2,
(float) pt2.getX(), (float) pt2.getY(),
TextAnchor.CENTER);
}
}
firstLabel = false;
// now do the minor tick marks
if (this.minorTickCount > 0 && this.minorTickLength > 0.0) {
double minorTickIncrement = this.majorTickIncrement
/ (this.minorTickCount + 1);
for (int i = 0; i < this.minorTickCount; i++) {
double vv = v + ((i + 1) * minorTickIncrement);
if (vv >= this.upperBound) {
break;
}
double angle = valueToAngle(vv);
arc.setArc(arcRect, this.startAngle, angle
- this.startAngle, Arc2D.OPEN);
pt0 = arc.getEndPoint();
arc.setArc(arcRectMinor, this.startAngle, angle
- this.startAngle, Arc2D.OPEN);
Point2D pt3 = arc.getEndPoint();
g2.setStroke(this.minorTickStroke);
g2.setPaint(this.minorTickPaint);
workingLine.setLine(pt0, pt3);
g2.draw(workingLine);
}
}
}
}
/**
* Converts a data value to an angle against this scale.
*
* @param value the data value.
*
* @return The angle (in degrees, using the same specification as Java's
* Arc2D class).
*
* @see #angleToValue(double)
*/
public double valueToAngle(double value) {
double range = this.upperBound - this.lowerBound;
double unit = this.extent / range;
return this.startAngle + unit * (value - this.lowerBound);
}
/**
* Converts the given angle to a data value, based on this scale.
*
* @param angle the angle.
*
* @return The data value.
*
* @see #valueToAngle(double)
*/
public double angleToValue(double angle) {
return Double.NaN; // FIXME
}
/**
* Tests this <code>StandardDialScale</code> 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 StandardDialScale)) {
return false;
}
StandardDialScale that = (StandardDialScale) obj;
if (this.lowerBound != that.lowerBound) {
return false;
}
if (this.upperBound != that.upperBound) {
return false;
}
if (this.startAngle != that.startAngle) {
return false;
}
if (this.extent != that.extent) {
return false;
}
if (this.tickRadius != that.tickRadius) {
return false;
}
if (this.majorTickIncrement != that.majorTickIncrement) {
return false;
}
if (this.majorTickLength != that.majorTickLength) {
return false;
}
if (!PaintUtilities.equal(this.majorTickPaint, that.majorTickPaint)) {
return false;
}
if (!this.majorTickStroke.equals(that.majorTickStroke)) {
return false;
}
if (this.minorTickCount != that.minorTickCount) {
return false;
}
if (this.minorTickLength != that.minorTickLength) {
return false;
}
if (!PaintUtilities.equal(this.minorTickPaint, that.minorTickPaint)) {
return false;
}
if (!this.minorTickStroke.equals(that.minorTickStroke)) {
return false;
}
if (this.tickLabelsVisible != that.tickLabelsVisible) {
return false;
}
if (this.tickLabelOffset != that.tickLabelOffset) {
return false;
}
if (!this.tickLabelFont.equals(that.tickLabelFont)) {
return false;
}
if (!PaintUtilities.equal(this.tickLabelPaint, that.tickLabelPaint)) {
return false;
}
return super.equals(obj);
}
/**
* Returns a hash code for this instance.
*
* @return A hash code.
*/
public int hashCode() {
int result = 193;
// lowerBound
long temp = Double.doubleToLongBits(this.lowerBound);
result = 37 * result + (int) (temp ^ (temp >>> 32));
// upperBound
temp = Double.doubleToLongBits(this.upperBound);
result = 37 * result + (int) (temp ^ (temp >>> 32));
// startAngle
temp = Double.doubleToLongBits(this.startAngle);
result = 37 * result + (int) (temp ^ (temp >>> 32));
// extent
temp = Double.doubleToLongBits(this.extent);
result = 37 * result + (int) (temp ^ (temp >>> 32));
// tickRadius
temp = Double.doubleToLongBits(this.tickRadius);
result = 37 * result + (int) (temp ^ (temp >>> 32));
// majorTickIncrement
// majorTickLength
// majorTickPaint
// majorTickStroke
// minorTickCount
// minorTickLength
// minorTickPaint
// minorTickStroke
// tickLabelOffset
// tickLabelFont
// tickLabelsVisible
// tickLabelFormatter
// firstTickLabelsVisible
return result;
}
/**
* Returns a clone of this instance.
*
* @return A clone.
*
* @throws CloneNotSupportedException if this instance is not cloneable.
*/
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.majorTickPaint, stream);
SerialUtilities.writeStroke(this.majorTickStroke, stream);
SerialUtilities.writePaint(this.minorTickPaint, stream);
SerialUtilities.writeStroke(this.minorTickStroke, stream);
SerialUtilities.writePaint(this.tickLabelPaint, 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.majorTickPaint = SerialUtilities.readPaint(stream);
this.majorTickStroke = SerialUtilities.readStroke(stream);
this.minorTickPaint = SerialUtilities.readPaint(stream);
this.minorTickStroke = SerialUtilities.readStroke(stream);
this.tickLabelPaint = SerialUtilities.readPaint(stream);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -