Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX轴自动范围设置忽略不可见的序列_Java_Javafx_Linechart_Axis Labels - Fatal编程技术网

JavaFX轴自动范围设置忽略不可见的序列

JavaFX轴自动范围设置忽略不可见的序列,java,javafx,linechart,axis-labels,Java,Javafx,Linechart,Axis Labels,我得到了一个具有自动调整x轴和y轴范围的折线图,但我可以通过切换按钮隐藏我的系列,该按钮将.setVisible()更改为相反的方向 private LineChart<String, Number> chart; @FXML private void initialize() { chart.getXAxis().setAutoRanging(true); chart.getYAxis().setAutoRanging(true); } 专用线形图; @FXML

我得到了一个具有自动调整x轴和y轴范围的
折线图
,但我可以通过切换按钮隐藏我的
系列
,该按钮将
.setVisible()
更改为相反的方向

private LineChart<String, Number> chart;
@FXML
private void initialize() {
    chart.getXAxis().setAutoRanging(true);
    chart.getYAxis().setAutoRanging(true);

}
专用线形图;
@FXML
私有void初始化(){
chart.getXAxis().setAutoRanging(true);
chart.getYAxis().setAutoRanging(true);
}

有没有办法仍然自动改变轴的范围,让他们忽略不可见的
系列

我最近一直在努力解决同样的问题,并通过以下方式扩展LineChart-class解决了这个问题:

public class MyLineChart extends LineChart<String, Number> {

    public MyLineChart() {
        super(new CategoryAxis(), new NumberAxis());
    }

    @Override
    protected void updateAxisRange() {
        final Axis<String> xa = getXAxis();
        final Axis<Number> ya = getYAxis();
        List<String> xData = null;
        List<Number> yData = null;
        if (xa.isAutoRanging())
            xData = new ArrayList<String>();
        if (ya.isAutoRanging())
            yData = new ArrayList<Number>();
        if (xData != null || yData != null) {
            for (Series<String, Number> series : getData()) {
                if (series.getNode() != null && !series.getNode().isVisible())
                    continue;
                for (Data<String, Number> data : series.getData()) {
                    if (xData != null)
                        xData.add(data.getXValue());
                    if (yData != null)
                        yData.add(data.getYValue());
                }
            }
            // RT-32838 No need to invalidate range if there is one data item -
            // whose value is zero.
            if (xData != null && !(xData.size() == 1
                    && getXAxis().toNumericValue(xData.get(0)) == 0)) {
                xa.invalidateRange(xData);
            }
            if (yData != null && !(yData.size() == 1
                    && getYAxis().toNumericValue(yData.get(0)) == 0)) {
                ya.invalidateRange(yData);
            }

        }
    }

}
通过这些更改,将跳过不可见序列,并被autoRange函数忽略。 要隐藏序列,请在序列对象上使用命令:
getNode().setVisible(false)
。要使用FXML嵌入图表,需要删除FXML文件中的
。此外,您需要将折线图更改为MyLineChart并更新导入

此方法也可以适应其他轴类型-只需在MyLineChart类中更改它们即可

希望我能帮忙

if (series.getNode() != null && !series.getNode().isVisible())
    continue;