Charts JavaFX8图表getyaxis.setvisible(false)和setHorizontalGridLinesVisible(false)只需单击一次

Charts JavaFX8图表getyaxis.setvisible(false)和setHorizontalGridLinesVisible(false)只需单击一次,charts,javafx,Charts,Javafx,我已经编写了一个简单的javafx8应用程序,带有一个折线图和一个按钮。 我想更改yaxis和horizontalgridlines的visible属性,当用户单击按钮时,它就是我在控制器类中拥有的: public class Controller { @FXML LineChart chart; @FXML private void butClick(ActionEvent event) throws Exception { chart.getY

我已经编写了一个简单的javafx8应用程序,带有一个折线图和一个按钮。 我想更改yaxis和horizontalgridlines的visible属性,当用户单击按钮时,它就是我在控制器类中拥有的:

public class Controller {
    @FXML
    LineChart chart;
    @FXML
    private void butClick(ActionEvent event) throws Exception {
        chart.getYAxis().setVisible(false);
        chart.setHorizontalGridLinesVisible(false);
    }
}
问题是第一次单击时,只有水平网格线消失,第二次单击时,yaxis消失。 为什么?
谢谢

问题在于setHorizontalGridLinesVisible在y轴上调用内部requestAxisLayout。这似乎使y轴再次可见。您的问题可以简化为调用

    lineChart.getYAxis().setVisible(false);
    lineChart.getYAxis().requestAxisLayout();
y轴不会被隐藏。您的问题的解决方法可能是使用

     lineChart.getYAxis().setOpacity(0);
而不是setVisible()

我找到了一个解决方案:

1-听取图表的horizontalgridlinevisible属性,并在更改时requestLayout()

2-图表的布局属性,并检查newvalue是否为false(布局已完成),然后设置YAxis可见性->

chart.needsLayoutProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        if (chart.getYAxis().isVisible()!=chart.isHorizontalGridLinesVisible())
        {
            if (!newValue)
            {
                chart.getYAxis().setVisible(chart.isHorizontalGridLinesVisible());
            }
        }
    }
});
chart.horizontalGridLinesVisibleProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        chart.requestLayout();
    }
});
chart.needsLayoutProperty().addListener(新的ChangeListener()){
@凌驾
公共无效已更改(可观察值)