Değil kolay seçenek eksende inverse()
operasyonu sağlamaktır. JRE sınıfları yokken oldukça karmaşıktır.
bu yaklaşım konusunda bazı ipuçları:
1) uzatmak ValueAxis veya Eksen (NumberAxis
2) eksen sınıfına mantıksal bir alan ve inverse()
yöntem ekleyin) maalesef kesindir
public void inverse() {
inversed = !inversed; // boolean property
invalidateRange();
requestAxisLayout();
}
3) ValueAxis'i genişletirseniz - üst sınıf tarafından uygulanan ofseti telafi etmeniz gerekir (ve eksenin boyutunun değiştiği kodu durdurun)
@Override
public Long getValueForDisplay(double displayPosition) {
if (inversed)
return super.getValueForDisplay(offset - displayPosition);
else
return super.getValueForDisplay(displayPosition);
}
@Override
public double getDisplayPosition(Long value) {
if (inversed)
return offset - super.getDisplayPosition(value);
else
return super.getDisplayPosition(value);
}
4) (en çirkin parça) Axis sınıfı tarafından bastırılan etiket işaretlerini kaldırın - orijinal uygulama, varsayılan kene sırasına bağlıdır. Yansıma yoluyla kilidini açacak başka bir yol bulamadım. Yani bu çok kırılgan.
@Override
protected void layoutChildren() {
final Side side = getSide();
boolean isHorisontal = null == side || side.isHorizontal();
this.offset = isHorisontal ? getWidth() : getHeight();
super.layoutChildren();
if (inversed) {
double prevEnd = isHorisontal ? offset + getTickLabelGap() : 0;
for (TickMark m : getTickMarks()) {
double position = m.getPosition();
try {
final Text textNode = (Text) textNodeField.get(m);
final Bounds bounds = textNode.getLayoutBounds();
if (0 <= position && position <= offset)
if (isHorisontal) {
textNode.setVisible(position < prevEnd);
prevEnd = position - (bounds.getWidth() + getTickLabelGap());
} else {
textNode.setVisible(position > prevEnd);
prevEnd = position + (bounds.getHeight() + getTickLabelGap());
}
} catch (IllegalAccessException ignored) {
}
}
}
}
Y ekseni Bu örnekte
Kullanarak şunları yapabilirsiniz: Tüm verilerimi grafiklerde kullanmadan önce negatif sayılara dönüştürmemi mi öneriyorsunuz? – mawcsco
evet. Elbette ki en iyi yol değil, ama daha hızlı ve daha sonra inversiyon işlevselliği ile grafiği genişletiyor. Verilerin doğrudan güncellenmesini önlemek için, 'XYChart.Data' sınıfını inversiyon mantığıyla genişletebilir veya grafiğe ters numaralar ekleyeceğiniz bir yardımcı program yöntemi ekleyebilirsiniz. –