नहीं आसान विकल्प अक्ष पर inverse()
आपरेशन सक्षम बनाना है। जेआरई कक्षाओं को पैच किए बिना यह काफी जटिल है।
कैसे दृष्टिकोण इस पर कुछ संकेत:
1) का विस्तार ValueAxis या एक्सिस (NumberAxis दुर्भाग्य से अंतिम)
2) अपने अक्ष वर्ग के लिए बूलियन क्षेत्र और inverse()
विधि जोड़ने है
public void inverse() {
inversed = !inversed; // boolean property
invalidateRange();
requestAxisLayout();
}
3) यदि आप ValueAxis का विस्तार करते हैं - आपको सुपरक्लास द्वारा लागू ऑफ़सेट को क्षतिपूर्ति करने की आवश्यकता होगी (और उस कोड को अवरुद्ध करें जहां धुरी का आकार बदल रहा है)
@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) (सबसे उग्र टुकड़ा) एक्सिस क्लास द्वारा दबाए गए लेबल टिक्स को अनदेखा करें - मूल कार्यान्वयन टिकों के डिफ़ॉल्ट क्रम पर निर्भर करता है। मुझे किसी अन्य तरीके से नहीं मिला जो इसे प्रतिबिंब के माध्यम से अनलॉक करता है। तो यह बहुत भंगुर है।
@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) {
}
}
}
}
वाई अक्ष इस उदाहरण
क्या आप सुझाव दे रहे हैं कि मैं चार्ट में इसका उपयोग करने से पहले अपने सभी डेटा को ऋणात्मक संख्या में परिवर्तित कर दूं? – mawcsco
हां। यह पाठ्यक्रम का सबसे अच्छा तरीका नहीं है, लेकिन इनवर्जन कार्यक्षमता के साथ चार्ट को विस्तारित करने के बाद बहुत तेज है। डेटा के प्रत्यक्ष अपडेट से बचने के लिए आप या तो 'XYChart.Data' कक्षा को इनवर्जन तर्क के साथ बढ़ा सकते हैं या एक उपयोगिता विधि पेश कर सकते हैं जो उलटा संख्याओं को चार्ट में जोड़ देगा। –