javafx 8 图表 getyaxis.setvisible(false) 和 setHorizontalGridLinesVisible(false) 一键点击
javafx 8 chart getyaxis.setvisible(false) and setHorizontalGridLinesVisible(false) in one click
我编写了一个简单的 javafx8 应用程序,其中包含一个折线图和一个按钮。
我想更改 yaxis 和 horizontalgridlines 的可见 属性,当用户单击按钮时,这就是我在 controller class:
public class Controller {
@FXML
LineChart chart;
@FXML
private void butClick(ActionEvent event) throws Exception {
chart.getYAxis().setVisible(false);
chart.setHorizontalGridLinesVisible(false);
}
}
问题是第一次点击,只有HorizontalGridLines消失,第二次点击,yaxis消失了。
为什么?
谢谢
问题是 setHorizontalGridLinesVisible 在 y 轴上内部调用了 requestAxisLayout。这似乎使 y 轴再次可见。您的问题可以简化为调用
lineChart.getYAxis().setVisible(false);
lineChart.getYAxis().requestAxisLayout();
y 轴不会被隐藏。您的问题的解决方法可能是使用
lineChart.getYAxis().setOpacity(0);
而不是 setVisible();
我找到了解决方案:
1- 监听 horizontalgridlinevisible 属性 of chart, and requestLayout() on change.
2- 布局 属性 图表,并检查新值是否为 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();
}
});
我编写了一个简单的 javafx8 应用程序,其中包含一个折线图和一个按钮。 我想更改 yaxis 和 horizontalgridlines 的可见 属性,当用户单击按钮时,这就是我在 controller class:
public class Controller {
@FXML
LineChart chart;
@FXML
private void butClick(ActionEvent event) throws Exception {
chart.getYAxis().setVisible(false);
chart.setHorizontalGridLinesVisible(false);
}
}
问题是第一次点击,只有HorizontalGridLines消失,第二次点击,yaxis消失了。 为什么? 谢谢
问题是 setHorizontalGridLinesVisible 在 y 轴上内部调用了 requestAxisLayout。这似乎使 y 轴再次可见。您的问题可以简化为调用
lineChart.getYAxis().setVisible(false);
lineChart.getYAxis().requestAxisLayout();
y 轴不会被隐藏。您的问题的解决方法可能是使用
lineChart.getYAxis().setOpacity(0);
而不是 setVisible();
我找到了解决方案:
1- 监听 horizontalgridlinevisible 属性 of chart, and requestLayout() on change.
2- 布局 属性 图表,并检查新值是否为 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();
}
});