📄 numberaxis.java
字号:
*
* @return The width or height used to draw the axis.
*/
protected double drawTickMarksAndLabels(Graphics2D g2, double cursor,
Rectangle2D plotArea,
Rectangle2D dataArea, RectangleEdge edge) {
if (isAxisLineVisible()) {
drawAxisLine(g2, cursor, dataArea, edge);
}
double ol = getTickMarkOutsideLength();
double il = getTickMarkInsideLength();
refreshTicks(g2, cursor, plotArea, dataArea, edge);
g2.setFont(getTickLabelFont());
Iterator iterator = getTicks().iterator();
while (iterator.hasNext()) {
Tick tick = (Tick) iterator.next();
float xx = (float) translateValueToJava2D(tick.getNumericalValue(), dataArea, edge);
if (isTickLabelsVisible()) {
g2.setPaint(getTickLabelPaint());
if (isVerticalTickLabels()) {
RefineryUtilities.drawRotatedString(tick.getText(), g2,
tick.getX(), tick.getY(), -Math.PI / 2);
}
else {
g2.drawString(tick.getText(), tick.getX(), tick.getY());
}
}
if (isTickMarksVisible()) {
Line2D mark = null;
g2.setStroke(getTickMarkStroke());
g2.setPaint(getTickMarkPaint());
if (edge == RectangleEdge.LEFT) {
mark = new Line2D.Double(cursor - ol, xx, cursor + il, xx);
}
else if (edge == RectangleEdge.RIGHT) {
mark = new Line2D.Double(cursor + ol, xx, cursor - il, xx);
}
else if (edge == RectangleEdge.TOP) {
mark = new Line2D.Double(xx, cursor - ol, xx, cursor + il);
}
else if (edge == RectangleEdge.BOTTOM) {
mark = new Line2D.Double(xx, cursor + ol, xx, cursor - il);
}
g2.draw(mark);
}
}
return this.reservedForTickLabels;
}
/**
* Creates the standard tick units.
* <P>
* If you don't like these defaults, create your own instance of TickUnits
* and then pass it to the setStandardTickUnits(...) method in the
* NumberAxis class.
*
* @return the standard tick units.
*/
public static TickUnits createStandardTickUnits() {
TickUnits units = new TickUnits();
// we can add the units in any order, the TickUnits collection will sort them...
units.add(new NumberTickUnit(0.0000001, new DecimalFormat("0.0000000")));
units.add(new NumberTickUnit(0.000001, new DecimalFormat("0.000000")));
units.add(new NumberTickUnit(0.00001, new DecimalFormat("0.00000")));
units.add(new NumberTickUnit(0.0001, new DecimalFormat("0.0000")));
units.add(new NumberTickUnit(0.001, new DecimalFormat("0.000")));
units.add(new NumberTickUnit(0.01, new DecimalFormat("0.00")));
units.add(new NumberTickUnit(0.1, new DecimalFormat("0.0")));
units.add(new NumberTickUnit(1, new DecimalFormat("0")));
units.add(new NumberTickUnit(10, new DecimalFormat("0")));
units.add(new NumberTickUnit(100, new DecimalFormat("0")));
units.add(new NumberTickUnit(1000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(10000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(100000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(1000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(10000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(100000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(1000000000, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(10000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(100000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(0.00000025, new DecimalFormat("0.00000000")));
units.add(new NumberTickUnit(0.0000025, new DecimalFormat("0.0000000")));
units.add(new NumberTickUnit(0.000025, new DecimalFormat("0.000000")));
units.add(new NumberTickUnit(0.00025, new DecimalFormat("0.00000")));
units.add(new NumberTickUnit(0.0025, new DecimalFormat("0.0000")));
units.add(new NumberTickUnit(0.025, new DecimalFormat("0.000")));
units.add(new NumberTickUnit(0.25, new DecimalFormat("0.00")));
units.add(new NumberTickUnit(2.5, new DecimalFormat("0.0")));
units.add(new NumberTickUnit(25, new DecimalFormat("0")));
units.add(new NumberTickUnit(250, new DecimalFormat("0")));
units.add(new NumberTickUnit(2500, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(25000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(250000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2500000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(25000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(250000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(2500000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(25000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(250000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(0.0000005, new DecimalFormat("0.0000000")));
units.add(new NumberTickUnit(0.000005, new DecimalFormat("0.000000")));
units.add(new NumberTickUnit(0.00005, new DecimalFormat("0.00000")));
units.add(new NumberTickUnit(0.0005, new DecimalFormat("0.0000")));
units.add(new NumberTickUnit(0.005, new DecimalFormat("0.000")));
units.add(new NumberTickUnit(0.05, new DecimalFormat("0.00")));
units.add(new NumberTickUnit(0.5, new DecimalFormat("0.0")));
units.add(new NumberTickUnit(5L, new DecimalFormat("0")));
units.add(new NumberTickUnit(50L, new DecimalFormat("0")));
units.add(new NumberTickUnit(500L, new DecimalFormat("0")));
units.add(new NumberTickUnit(5000L, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(50000L, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(500000L, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000000L, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(50000000L, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(500000000L, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(5000000000L, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(50000000000L, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(500000000000L, new DecimalFormat("#,###,###,##0")));
return units;
}
/**
* Returns a collection of tick units for integer values.
*
* @return a collection of tick units for integer values.
*/
public static TickUnits createIntegerTickUnits() {
TickUnits units = new TickUnits();
units.add(new NumberTickUnit(1, new DecimalFormat("0")));
units.add(new NumberTickUnit(2, new DecimalFormat("0")));
units.add(new NumberTickUnit(5, new DecimalFormat("0")));
units.add(new NumberTickUnit(10, new DecimalFormat("0")));
units.add(new NumberTickUnit(20, new DecimalFormat("0")));
units.add(new NumberTickUnit(50, new DecimalFormat("0")));
units.add(new NumberTickUnit(100, new DecimalFormat("0")));
units.add(new NumberTickUnit(200, new DecimalFormat("0")));
units.add(new NumberTickUnit(500, new DecimalFormat("0")));
units.add(new NumberTickUnit(1000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(10000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(20000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(50000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(100000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(200000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(500000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(1000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(10000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(20000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(50000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(100000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(200000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(500000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(1000000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2000000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000000000.0, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(10000000000.0, new DecimalFormat("#,##0")));
return units;
}
/**
* Creates a collection of standard tick units. The supplied locale is used to create the
* number formatter (a localised instance of <code>NumberFormat</code>).
* <P>
* If you don't like these defaults, create your own instance of {@link TickUnits}
* and then pass it to the <code>setStandardTickUnits(...)</code> method.
*
* @param locale the locale.
*
* @return a tick unit collection.
*/
public static TickUnits createStandardTickUnits(Locale locale) {
TickUnits units = new TickUnits();
NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
// we can add the units in any order, the TickUnits collection will sort them...
units.add(new NumberTickUnit(0.0000001, numberFormat));
units.add(new NumberTickUnit(0.000001, numberFormat));
units.add(new NumberTickUnit(0.00001, numberFormat));
units.add(new NumberTickUnit(0.0001, numberFormat));
units.add(new NumberTickUnit(0.001, numberFormat));
units.add(new NumberTickUnit(0.01, numberFormat));
units.add(new NumberTickUnit(0.1, numberFormat));
units.add(new NumberTickUnit(1, numberFormat));
units.add(new NumberTickUnit(10, numberFormat));
units.add(new NumberTickUnit(100, numberFormat));
units.add(new NumberTickUnit(1000, numberFormat));
units.add(new NumberTickUnit(10000, numberFormat));
units.add(new NumberTickUnit(100000, numberFormat));
units.add(new NumberTickUnit(1000000, numberFormat));
units.add(new NumberTickUnit(10000000, numberFormat));
units.add(new NumberTickUnit(100000000, numberFormat));
units.add(new NumberTickUnit(1000000000, numberFormat));
units.add(new NumberTickUnit(10000000000.0, numberFormat));
units.add(new NumberTickUnit(0.00000025, numberFormat));
units.add(new NumberTickUnit(0.0000025, numberFormat));
units.add(new NumberTickUnit(0.000025, numberFormat));
units.add(new NumberTickUnit(0.00025, numberFormat));
units.add(new NumberTickUnit(0.0025, numberFormat));
units.add(new NumberTickUnit(0.025, numberFormat));
units.add(new NumberTickUnit(0.25, numberFormat));
units.add(new NumberTickUnit(2.5, numberFormat));
units.add(new NumberTickUnit(25, numberFormat));
units.add(new NumberTickUnit(250, numberFormat));
units.add(new NumberTickUnit(2500, numberFormat));
units.add(new NumberTickUnit(25000, numberFormat));
units.add(new NumberTickUnit(250000, numberFormat));
units.add(new NumberTickUnit(2500000, numberFormat));
units.add(new NumberTickUnit(25000000, numberFormat));
units.add(new NumberTickUnit(250000000, numberFormat));
units.add(new NumberTickUnit(2500000000.0, numberFormat));
units.add(new NumberTickUnit(25000000000.0, numberFormat));
units.add(new NumberTickUnit(0.0000005, numberFormat));
units.add(new NumberTickUnit(0.000005, numberFormat));
units.add(new NumberTickUnit(0.00005, numberFormat));
units.add(new NumberTickUnit(0.0005, numberFormat));
units.add(new NumberTickUnit(0.005, numberFormat));
units.add(new NumberTickUnit(0.05, numberFormat));
units.add(new NumberTickUnit(0.5, numberFormat));
units.add(new NumberTickUnit(5L, numberFormat));
units.add(new NumberTickUnit(50L, numberFormat));
units.add(new NumberTickUnit(500L, numberFormat));
units.add(new NumberTickUnit(5000L, numberFormat));
units.add(new NumberTickUnit(50000L, numberFormat));
units.add(new NumberTickUnit(500000L, numberFormat));
units.add(new NumberTickUnit(5000000L, numberFormat));
units.add(new NumberTickUnit(50000000L, numberFormat));
units.add(new NumberTickUnit(500000000L, numberFormat));
units.add(new NumberTickUnit(5000000000L, numberFormat));
units.add(new NumberTickUnit(50000000000L, numberFormat));
return units;
}
/**
* Returns a collection of tick units for integer values.
* Uses a given Locale to create the DecimalFormats.
*
* @param locale the locale to use to represent Numbers.
*
* @return a collection of tick units for integer values.
*/
public static TickUnits createIntegerTickUnits(Locale locale) {
TickUnits units = new TickUnits();
NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
units.add(new NumberTickUnit(1, numberFormat));
units.add(new NumberTickUnit(2, numberFormat));
units.add(new NumberTickUnit(5, numberFormat));
units.add(new NumberTickUnit(10, numberFormat));
units.add(new NumberTickUnit(20, numberFormat));
units.add(new NumberTickUnit(50, numberFormat));
units.add(new NumberTickUnit(100, numberFormat));
units.add(new NumberTickUnit(200, numberFormat));
units.add(new NumberTickUnit(500, numberFormat));
units.add(new NumberTickUnit(1000, numberFormat));
units.add(new NumberTickUnit(2000, numberFormat));
units.add(new NumberTickUnit(5000, numberFormat));
units.add(new NumberTickUnit(10000, numberFormat));
units.add(new NumberTickUnit(20000, numberFormat));
units.add(new NumberTickUnit(50000, numberFormat));
units.add(new NumberTickUnit(100000, numberFormat));
units.add(new NumberTickUnit(200000, numberFormat));
units.add(new NumberTickUnit(500000, numberFormat));
units.add(new NumberTickUnit(1000000, numberFormat));
units.add(new NumberTickUnit(2000000, numberFormat));
units.add(new NumberTickUnit(5000000, numberFormat));
units.add(new NumberTickUnit(10000000, numberFormat));
units.add(new NumberTickUnit(20000000, numberFormat));
units.add(new NumberTickUnit(50000000, numberFormat));
units.add(new NumberTickUnit(100000000, numberFormat));
units.add(new NumberTickUnit(200000000, numberFormat));
units.add(new NumberTickUnit(500000000, numberFormat));
units.add(new NumberTickUnit(1000000000, numberFormat));
units.add(new NumberTickUnit(2000000000, numberFormat));
units.add(new NumberTickUnit(5000000000.0, numberFormat));
units.add(new NumberTickUnit(10000000000.0, numberFormat));
return units;
}
/**
* A utility method for determining the height of the tallest tick label.
*
* @param g2 the graphics device.
* @param drawArea the area within which the plot and axes should be drawn.
* @param vertical a flag that indicates whether or not the tick labels are 'vertical'.
*
* @return the height of the tallest tick label.
*/
protected double getMaxTickLabelHeight(Graphics2D g2, Rectangle2D drawArea, boolean vertical) {
Font font = getTickLabelFont();
g2.setFont(font);
FontRenderContext frc = g2.getFontRenderContext();
double maxHeight = 0.0;
if (vertical) {
Iterator iterator = getTicks().iterator();
while (iterator.hasNext()) {
Tick tick = (Tick) iterator.next();
Rectangle2D labelBounds = font.getStringBounds(tick.getText(), frc);
if (labelBounds.getWidth() > maxHeight) {
maxHeight = labelBounds.getWidth();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -