📄 valueaxis.java
字号:
Graphics2D g2, Rectangle2D drawArea, boolean vertical) { Insets insets = getTickLabelInsets(); Font font = getTickLabelFont(); double maxWidth = 0.0; if (!vertical) { FontMetrics fm = g2.getFontMetrics(font); Iterator iterator = ticks.iterator(); while (iterator.hasNext()) { Tick tick = (Tick) iterator.next(); Rectangle2D labelBounds = TextUtilities.getTextBounds(tick.getText(), g2, fm); if (labelBounds.getWidth() + insets.left + insets.right > maxWidth) { maxWidth = labelBounds.getWidth() + insets.left + insets.right; } } } else { LineMetrics metrics = font.getLineMetrics("ABCxyz", g2.getFontRenderContext()); maxWidth = metrics.getHeight() + insets.top + insets.bottom; } return maxWidth; } /** * Returns a flag that controls the direction of values on the axis. * <P> * For a regular axis, values increase from left to right (for a horizontal * axis) and bottom to top (for a vertical axis). When the axis is * 'inverted', the values increase in the opposite direction. * * @return the flag. */ public boolean isInverted() { return this.inverted; } /** * Sets a flag that controls the direction of values on the axis, and * notifies registered listeners that the axis has changed. * * @param flag the flag. */ public void setInverted(boolean flag) { if (this.inverted != flag) { this.inverted = flag; notifyListeners(new AxisChangeEvent(this)); } } /** * Returns true if the axis range is automatically adjusted to fit the data. * * @return the auto-range flag. */ public boolean isAutoRange() { return this.autoRange; } /** * Sets a flag that determines whether or not the axis range is * automatically adjusted to fit the data, and notifies registered * listeners that the axis has been modified. * * @param auto the new value of the flag. */ public void setAutoRange(boolean auto) { setAutoRange(auto, true); } /** * Sets the auto range attribute. If the <code>notify</code> flag is set, an * {@link AxisChangeEvent} is sent to registered listeners. * * @param auto the new value of the flag. * @param notify notify listeners? */ protected void setAutoRange(boolean auto, boolean notify) { if (this.autoRange != auto) { this.autoRange = auto; if (this.autoRange) { autoAdjustRange(); } if (notify) { notifyListeners(new AxisChangeEvent(this)); } } } /** * Returns the minimum size allowed for the axis range when it is automatically calculated. * * @return the minimum range. */ public double getAutoRangeMinimumSize() { return this.autoRangeMinimumSize; } /** * Sets the auto range minimum size and sends an {@link AxisChangeEvent} to all registered * listeners. * * @param size the size. */ public void setAutoRangeMinimumSize(double size) { setAutoRangeMinimumSize(size, true); } /** * Sets the minimum size allowed for the axis range when it is automatically calculated. * <p> * If requested, an {@link AxisChangeEvent} is forwarded to all registered listeners. * * @param size the new minimum. * @param notify notify listeners? */ public void setAutoRangeMinimumSize(double size, boolean notify) { // check argument... if (size <= 0.0) { throw new IllegalArgumentException( "NumberAxis.setAutoRangeMinimumSize(double): must be > 0.0."); } // make the change... if (this.autoRangeMinimumSize != size) { this.autoRangeMinimumSize = size; if (this.autoRange) { autoAdjustRange(); } if (notify) { notifyListeners(new AxisChangeEvent(this)); } } } /** * Returns the lower margin for the axis, expressed as a percentage of the axis range. This * controls the space added to the lower end of the axis when the axis range is automatically * calculated (it is ignored when the axis range is set explicitly). The default value is * 0.05 (five percent). * * @return The lower margin. */ public double getLowerMargin() { return this.lowerMargin; } /** * Sets the lower margin for the axis (as a percentage of the axis range) and sends an * {@link AxisChangeEvent} to all registered listeners. This margin is added only when the * axis range is auto-calculated - if you set the axis range manually, the margin is ignored. * * @param margin the margin percentage (for example, 0.05 is five percent). */ public void setLowerMargin(double margin) { this.lowerMargin = margin; if (isAutoRange()) { autoAdjustRange(); } notifyListeners(new AxisChangeEvent(this)); } /** * Returns the upper margin for the axis, expressed as a percentage of the axis range. This * controls the space added to the lower end of the axis when the axis range is automatically * calculated (it is ignored when the axis range is set explicitly). The default value is * 0.05 (five percent). * * @return The upper margin. */ public double getUpperMargin() { return this.upperMargin; } /** * Sets the upper margin for the axis (as a percentage of the axis range) and sends an * {@link AxisChangeEvent} to all registered listeners. This margin is added only when the * axis range is auto-calculated - if you set the axis range manually, the margin is ignored. * * @param margin the margin percentage (for example, 0.05 is five percent). */ public void setUpperMargin(double margin) { this.upperMargin = margin; if (isAutoRange()) { autoAdjustRange(); } notifyListeners(new AxisChangeEvent(this)); } /** * Returns the fixed auto range. * * @return the length. */ public double getFixedAutoRange() { return this.fixedAutoRange; } /** * Sets the fixed auto range for the axis. * * @param length the range length. */ public void setFixedAutoRange(double length) { this.fixedAutoRange = length; notifyListeners(new AxisChangeEvent(this)); } /** * Returns the lower bound of the axis range. * * @return The lower bound. */ public double getLowerBound() { return this.range.getLowerBound(); } /** * Sets the lower bound for the axis range. An {@link AxisChangeEvent} is sent * to all registered listeners. * * @param min the new minimum. */ public void setLowerBound(double min) { if (this.range.getUpperBound() > min) { setRange(new Range(min, this.range.getUpperBound())); } else { setRange(new Range(min, min + 1.0)); } } /** * Returns the upper bound for the axis range. * * @return The upper bound. */ public double getUpperBound() { return this.range.getUpperBound(); } /** * Sets the upper bound for the axis range. An {@link AxisChangeEvent} is sent * to all registered listeners. * * @param max the new maximum. */ public void setUpperBound(double max) { if (this.range.getLowerBound() < max) { setRange(new Range(this.range.getLowerBound(), max)); } else { setRange(max - 1.0, max); } } /** * Returns the range for the axis. * * @return The axis range (never <code>null</code>). */ public Range getRange() { return this.range; } /** * Sets the range attribute and sends an {@link AxisChangeEvent} to all registered * listeners. As a side-effect, the auto-range flag is set to <code>false</code>. * * @param range the range (<code>null</code> not permitted). */ public void setRange(Range range) { // defer argument checking setRange(range, true, true); } /** * Sets the range for the axis, if requested, sends an {@link AxisChangeEvent} to all * registered listeners. As a side-effect, the auto-range flag is set to <code>false</code> * (optional). * * @param range the range (<code>null</code> not permitted). * @param turnOffAutoRange a flag that controls whether or not the auto range is turned off. * @param notify a flag that controls whether or not listeners are notified. */ public void setRange(Range range, boolean turnOffAutoRange, boolean notify) { if (range == null) { throw new IllegalArgumentException("Null 'range' argument."); } if (turnOffAutoRange) { this.autoRange = false; } this.range = range; if (notify) { notifyListeners(new AxisChangeEvent(this)); } } /** * Sets the axis range and sends an {@link AxisChangeEvent} to all registered * listeners. As a side-effect, the auto-range flag is set to <code>false</code>. * * @param lower the lower axis limit. * @param upper the upper axis limit. */ public void setRange(double lower, double upper) { setRange(new Range(lower, upper)); } /** * Sets the range for the axis (after first adding the current margins to the specified range) * and sends an {@link AxisChangeEvent} to all registered listeners. * * @param range the range (<code>null</code> not permitted). */ public void setRangeWithMargins(Range range) { setRangeWithMargins(range, true, true); } /** * Sets the range for the axis after first adding the current margins to the range and, if * requested, sends an {@link AxisChangeEvent} to all registered listeners. As a side-effect, * the auto-range flag is set to <code>false</code> (optional). * * @param range the range (excluding margins, <code>null</code> not permitted). * @param turnOffAutoRange a flag that controls whether or not the auto range is turned off. * @param notify a flag that controls whether or not listeners are notified. */ public void setRangeWithMargins(Range range, boolean turnOffAutoRange, boolean notify) { if (range == null) { throw new IllegalArgumentException("Null 'range' argument."); } setRange(Range.expand(range, getLowerMargin(), getUpperMargin()), turnOffAutoRange, notify); } /** * Sets the axis range (after first adding the current margins to the range) and sends an * {@link AxisChangeEvent} to all registered listeners. As a side-effect, the auto-range * flag is set to <code>false</code>. * * @param lower the lower axis limit. * @param upper the upper axis limit. */ public void setRangeWithMargins(double lower, double upper) { setRangeWithMargins(new Range(lower, upper)); } /** * Sets the axis range, where the new range is 'size' in length, and centered on 'value'. * * @param value the central value. * @param length the range length. */ public void setRangeAboutValue(double value, double length) { setRange(new Range(value - length / 2, value + length / 2)); } /** * Returns a flag indicating whether or not the tick unit is automatically * selected from a range of standard tick units. * * @return a flag indicating whether or not the tick unit is automatically selected. */ public boolean isAutoTickUnitSelection() { return this.autoTickUnitSelection; } /** * Sets a flag indicating whether or not the tick unit is automatically * selected from a range of standard tick units. If the flag is changed, registered
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -