-
Bug
-
Resolution: Fixed
-
P3
-
8u60
-
x86
-
os_x
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8168298 | 8u152 | Vadim Pakhnushev | P3 | Resolved | Fixed | b01 |
FULL PRODUCT VERSION :
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
A DESCRIPTION OF THE PROBLEM :
Use a Jfx Axis that the side is set to LEFT, RIGHT or TOP and call setTickLabelsVisible(false). When the Axis is displayed, the major tick marks are not rendered.
Axis class does not render ticks marks when tick labels are invisible. Empty space in position where tick mark is supposed to display. Minor tick marks do display as expected.
The problem looks to be in Axis.layoutChildren(). When ticklabels are not visible then the TickMark instances placed into the tickMarks list do not get updated with the position of the tickMarks. The position will remain 0 for each tickMark in the list. This is in lines 711 to 777.
Then later (lines 780 to 911) when the tickMarks are to be rendered, the position is 0. So, each tickMark gets rendered at 0 position instead of the correct location.
Interestingly though, for side == Bottom the position is not used from the tickMark instances. Instead, each tickMark position is recalculated by calling getDisplayPosition(tick.getValue()). This special case for position == Bottom explains why the tickMarks will render for Bottom Axes.
REGRESSION. Last worked in version 7u79
ADDITIONAL REGRESSION INFORMATION:
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See sample code
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Tick marks should be visible.
ACTUAL -
Blank space in location of expected tick.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class LineChartSample extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
//defining the axes
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Number of Month");
xAxis.setTickLabelsVisible(false);
xAxis.setSide(Side.TOP);
yAxis.setTickLabelsVisible(false);
//creating the chart
final LineChart<Number,Number> lineChart =
new LineChart<Number,Number>(xAxis,yAxis);
lineChart.setTitle("Stock Monitoring, 2010");
//defining a series
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
//populating the series with data
series.getData().add(new XYChart.Data(1, 23));
series.getData().add(new XYChart.Data(2, 14));
series.getData().add(new XYChart.Data(3, 15));
series.getData().add(new XYChart.Data(4, 24));
series.getData().add(new XYChart.Data(5, 34));
series.getData().add(new XYChart.Data(6, 36));
series.getData().add(new XYChart.Data(7, 22));
series.getData().add(new XYChart.Data(8, 45));
series.getData().add(new XYChart.Data(9, 43));
series.getData().add(new XYChart.Data(10, 17));
series.getData().add(new XYChart.Data(11, 29));
series.getData().add(new XYChart.Data(12, 25));
Scene scene = new Scene(lineChart,800,600);
lineChart.getData().add(series);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
---------- END SOURCE ----------
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
A DESCRIPTION OF THE PROBLEM :
Use a Jfx Axis that the side is set to LEFT, RIGHT or TOP and call setTickLabelsVisible(false). When the Axis is displayed, the major tick marks are not rendered.
Axis class does not render ticks marks when tick labels are invisible. Empty space in position where tick mark is supposed to display. Minor tick marks do display as expected.
The problem looks to be in Axis.layoutChildren(). When ticklabels are not visible then the TickMark instances placed into the tickMarks list do not get updated with the position of the tickMarks. The position will remain 0 for each tickMark in the list. This is in lines 711 to 777.
Then later (lines 780 to 911) when the tickMarks are to be rendered, the position is 0. So, each tickMark gets rendered at 0 position instead of the correct location.
Interestingly though, for side == Bottom the position is not used from the tickMark instances. Instead, each tickMark position is recalculated by calling getDisplayPosition(tick.getValue()). This special case for position == Bottom explains why the tickMarks will render for Bottom Axes.
REGRESSION. Last worked in version 7u79
ADDITIONAL REGRESSION INFORMATION:
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See sample code
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Tick marks should be visible.
ACTUAL -
Blank space in location of expected tick.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class LineChartSample extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
//defining the axes
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Number of Month");
xAxis.setTickLabelsVisible(false);
xAxis.setSide(Side.TOP);
yAxis.setTickLabelsVisible(false);
//creating the chart
final LineChart<Number,Number> lineChart =
new LineChart<Number,Number>(xAxis,yAxis);
lineChart.setTitle("Stock Monitoring, 2010");
//defining a series
XYChart.Series series = new XYChart.Series();
series.setName("My portfolio");
//populating the series with data
series.getData().add(new XYChart.Data(1, 23));
series.getData().add(new XYChart.Data(2, 14));
series.getData().add(new XYChart.Data(3, 15));
series.getData().add(new XYChart.Data(4, 24));
series.getData().add(new XYChart.Data(5, 34));
series.getData().add(new XYChart.Data(6, 36));
series.getData().add(new XYChart.Data(7, 22));
series.getData().add(new XYChart.Data(8, 45));
series.getData().add(new XYChart.Data(9, 43));
series.getData().add(new XYChart.Data(10, 17));
series.getData().add(new XYChart.Data(11, 29));
series.getData().add(new XYChart.Data(12, 25));
Scene scene = new Scene(lineChart,800,600);
lineChart.getData().add(series);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
---------- END SOURCE ----------
- backported by
-
JDK-8168298 Axis class does not render ticks marks when tick labels are invisible
- Resolved
- blocks
-
JDK-8166847 NumberAxis: sticked numbers sometimes
- Resolved