只需单击一下javafx 8图表getyaxis.setvisible(false)和setHorizo​​ntalGridLinesVisible(false)

时间:2015-03-13 21:51:51

标签: charts javafx

我编写了一个简单的javafx8应用程序,带有LineChart和Button。 我想改变yaxis和horizo​​ntalgridlines的可见属性,当用户点击按钮时,它是我在控制器类中的内容:

public class Controller {
    @FXML
    LineChart chart;
    @FXML
    private void butClick(ActionEvent event) throws Exception {
        chart.getYAxis().setVisible(false);
        chart.setHorizontalGridLinesVisible(false);
    }
}

首先点击问题,只有Horizo​​ntalGridLines消失,第二次点击时,y轴消失。 为什么? 感谢

2 个答案:

答案 0 :(得分:1)

问题是setHorizo​​ntalGridLinesVisible在y轴上内部调用requestAxisLayout。这似乎使y轴再次可见。你的问题可以减少到调用

    lineChart.getYAxis().setVisible(false);
    lineChart.getYAxis().requestAxisLayout();

y轴不会被隐藏。您的问题的解决方法可能是使用

     lineChart.getYAxis().setOpacity(0);

而不是setVisible();

答案 1 :(得分:0)

我找到了解决方案:

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

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

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();
    }
});