我编写了一个简单的javafx8应用程序,带有LineChart和Button。 我想改变yaxis和horizontalgridlines的可见属性,当用户点击按钮时,它是我在控制器类中的内容:
public class Controller {
@FXML
LineChart chart;
@FXML
private void butClick(ActionEvent event) throws Exception {
chart.getYAxis().setVisible(false);
chart.setHorizontalGridLinesVisible(false);
}
}
首先点击问题,只有HorizontalGridLines消失,第二次点击时,y轴消失。 为什么? 感谢
答案 0 :(得分:1)
问题是setHorizontalGridLinesVisible在y轴上内部调用requestAxisLayout。这似乎使y轴再次可见。你的问题可以减少到调用
lineChart.getYAxis().setVisible(false);
lineChart.getYAxis().requestAxisLayout();
y轴不会被隐藏。您的问题的解决方法可能是使用
lineChart.getYAxis().setOpacity(0);
而不是setVisible();
答案 1 :(得分:0)
我找到了解决方案:
1-听取图表的horizontalgridlinevisible属性,并在更改时 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();
}
});