private void handleEvents(final String EVENT_TYPE) { if ("RESIZE".equals(EVENT_TYPE)) { resize(); redraw(); } else if ("REDRAW".equals(EVENT_TYPE)) { redraw(); } else if ("RECALC".equals(EVENT_TYPE)) { angleRange = Helper.clamp(90.0, 180.0, getSkinnable().getAngleRange()); startAngle = getStartAngle(); minValue = getSkinnable().getMinValue(); range = getSkinnable().getRange(); sections = getSkinnable().getSections(); angleStep = angleRange / range; redraw(); } else if ("FINISHED".equals(EVENT_TYPE)) { needleTooltip.setText(String.format(locale, formatString, getSkinnable().getValue())); double value = getSkinnable().getValue(); if (getSkinnable().isValueVisible()) { Bounds bounds = pane.localToScreen(pane.getBoundsInLocal()); double xFactor = value > getSkinnable().getRange() * 0.8 ? 0.0 : 0.25; double tooltipAngle = value * angleStep; double sinValue = Math.sin(Math.toRadians(180 + angleRange * 0.5 - tooltipAngle)); double cosValue = Math.cos(Math.toRadians(180 + angleRange * 0.5 - tooltipAngle)); double needleTipX = bounds.getMinX() + bounds.getWidth() * 0.5 + bounds.getHeight() * sinValue; double needleTipY = bounds.getMinY() + bounds.getHeight() * 0.72 + bounds.getHeight() * cosValue; needleTooltip.show(needle, needleTipX, needleTipY); needleTooltip.setAnchorX(needleTooltip.getX() - needleTooltip.getWidth() * xFactor); } if (sections.isEmpty() || sectionsAlwaysVisible) return; for (Section section : sections) { if (section.contains(value)) { barTooltip.setText(section.getText()); break; } } } else if ("VISIBILITY".equals(EVENT_TYPE)) { Helper.enableNode(titleText, !getSkinnable().getTitle().isEmpty()); } }
private void drawSections() { if (sections.isEmpty()) return; sectionLayer.getChildren().clear(); double centerX = width * 0.5; double centerY = height * 0.85; double barRadius = height * 0.54210526; double barWidth = width * 0.28472222; for (Section section : sections) { Arc sectionBar = new Arc( centerX, centerY, barRadius, barRadius, angleRange * 0.5 + 90 - (section.getStart() * angleStep), -((section.getStop() - section.getStart()) - minValue) * angleStep); sectionBar.setType(ArcType.OPEN); sectionBar.setStroke(section.getColor()); sectionBar.setStrokeWidth(barWidth); sectionBar.setStrokeLineCap(StrokeLineCap.BUTT); sectionBar.setFill(null); Tooltip sectionTooltip = new Tooltip( new StringBuilder(section.getText()) .append("\n") .append(String.format(Locale.US, "%.2f", section.getStart())) .append(" - ") .append(String.format(Locale.US, "%.2f", section.getStop())) .toString()); sectionTooltip.setTextAlignment(TextAlignment.CENTER); Tooltip.install(sectionBar, sectionTooltip); sectionLayer.getChildren().add(sectionBar); } }