gpt4 book ai didi

java - 移动刻度标签JavaFx 2

转载 作者:行者123 更新时间:2023-11-30 03:43:29 28 4
gpt4 key购买 nike

是否可以将刻度标签移动/移动到图表中。目前我看到隐藏/显示刻度标签的 API 是否有可以在图表内移动刻度标签的 API?如果没有 API,那么我可以使用/应用某种技术来完成此任务吗?

当前代码

public class Graph extends Application{
private NumberAxis xAxis;
private NumberAxis yAxis;

public static void main(final String[] args)
{
launch(args);
}

@Override
public void start(final Stage primaryStage) throws Exception
{
xAxis = new NumberAxis(0, 300, 20);
xAxis.setAutoRanging(false);
xAxis.setAnimated(false);
xAxis.setMinorTickVisible(false);
xAxis.setTickLabelsVisible(false);
xAxis.setTickMarkVisible(false);

yAxis = new NumberAxis(30, 240, 30);
yAxis.setAutoRanging(false);
yAxis.setAnimated(false);
yAxis.setTickMarkVisible(false);
yAxis.setMinorTickVisible(false);
yAxis.setMinorTickCount(3);

final LineChart<Number, Number> ctg = new LineChart<>(xAxis, yAxis);

ctg.setAnimated(false);
ctg.setCreateSymbols(false);
ctg.setAlternativeRowFillVisible(false);
ctg.setLegendVisible(false);
ctg.setHorizontalGridLinesVisible(true);
ctg.setVerticalGridLinesVisible(true);

Series<Number, Number> series = new LineChart.Series<>();
ctg.getData().add(series);

for (int i = 0; i < 300; i += 5) {

XYChart.Series minorYGrid = new XYChart.Series();
minorYGrid.getData().add(new XYChart.Data(i, 30));
minorYGrid.getData().add(new XYChart.Data(i, 240));
ctg.getData().add(minorYGrid);
}

for (int i = 40; i <= 240; i += 10) {

XYChart.Series minorXGrid = new XYChart.Series();
minorXGrid.getData().add(new XYChart.Data(0, i));
minorXGrid.getData().add(new XYChart.Data(500, i));
ctg.getData().add(minorXGrid);
}

final Scene scene = new Scene(ctg, 1600, 400);
scene.getStylesheets().add("resources/application.css");
primaryStage.setScene(scene);
primaryStage.show();
}
}

当前结果

enter image description here

预期结果 enter image description here

最佳答案

平移单轴

您可以平移图表上的 y 轴。

例如:

yAxis.translateXProperty().bind(
xAxis.widthProperty().divide(2)
);

为了确保轴显示在图表顶部,您可以在场景中将深度缓冲区设置为 true,并将 yAxis 的 z 坐标设置为 -1。

yAxis.setTranslateZ(-1);

平移多个轴

您的“预期结果”实际上有多个垂直轴。不幸的是,JavaFX 中没有克隆方法来克隆节点。因此,您必须创建一个新轴并将其分层在图表顶部。实现这一目标的一种方法(这有点矫枉过正且效率低下)是创建一个全新的图表并将其分层在旧图表之上,类似于 draw layers of XYCharts 的解决方案中所做的操作。 。另一种方法可能更好,但有点棘手,就是创建另一个轴并将其堆叠在原始图表上。

示例代码

multi-axis chart

MultiAxisChart.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class MultiAxisChart extends Application {

@Override
public void start(final Stage primaryStage) throws Exception {
final StackPane chartStack = createChartStack();

final Scene scene = new Scene(chartStack, 1600, 400, true);
primaryStage.setScene(scene);
primaryStage.show();
}

private StackPane createChartStack() {
LineChart<Number, Number> bottomChart = createChart();
LineChart<Number, Number> topChart = createChart();

bottomChart.getYAxis().translateXProperty().bind(
bottomChart.getXAxis().widthProperty().multiply(1.0/3)
);
topChart.getYAxis().translateXProperty().bind(
topChart.getXAxis().widthProperty().multiply(2.0/3)
);

bottomChart.getYAxis().setTranslateZ(-1);
topChart.getYAxis().setTranslateZ(-1);

topChart.getStylesheets().addAll(getClass().getResource(
"overlay-chart.css"
).toExternalForm());

return new StackPane(bottomChart, topChart);
}

private LineChart<Number, Number> createChart() {
NumberAxis xAxis = new NumberAxis(0, 300, 20);
xAxis.setAutoRanging(false);
xAxis.setAnimated(false);
xAxis.setMinorTickVisible(false);
xAxis.setTickLabelsVisible(false);
xAxis.setTickMarkVisible(false);

NumberAxis yAxis = new NumberAxis(30, 240, 30);
yAxis.setAutoRanging(false);
yAxis.setAnimated(false);
yAxis.setTickMarkVisible(false);
yAxis.setMinorTickVisible(false);
yAxis.setMinorTickCount(3);

final LineChart<Number, Number> ctg = new LineChart<>(xAxis, yAxis);

ctg.setAnimated(false);
ctg.setCreateSymbols(false);
ctg.setAlternativeRowFillVisible(false);
ctg.setLegendVisible(false);
ctg.setHorizontalGridLinesVisible(true);
ctg.setVerticalGridLinesVisible(true);

return ctg;
}

public static void main(final String[] args) {
launch(args);
}
}

overlay-chart.css

/** file: overlay-chart.css (place in same directory as MultiAxisChart) */
.chart-plot-background {
-fx-background-color: transparent;
}

关于java - 移动刻度标签JavaFx 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303111/

28 4 0