非常直截了當的問題:如何讓圖表內容區域佔據可用的最大區域?如何使圖表內容區佔據可用的最大區域?
我正在使用JavaFX。在我的情況下,我想根據真/假yAxis
(0/1)有許多AreaCharts。不幸的是,我找不到解決方案如何使用yAxis或AreaChart對象上的方法setMaxHeight
或setPrefHeight
更改這些圖表的內容高度。
我已經嘗試了幾個SO的答案,但都沒有工作。
這裏是什麼,我至今截圖:
任何提示或建議?
非常直截了當的問題:如何讓圖表內容區域佔據可用的最大區域?如何使圖表內容區佔據可用的最大區域?
我正在使用JavaFX。在我的情況下,我想根據真/假yAxis
(0/1)有許多AreaCharts。不幸的是,我找不到解決方案如何使用yAxis或AreaChart對象上的方法setMaxHeight
或setPrefHeight
更改這些圖表的內容高度。
我已經嘗試了幾個SO的答案,但都沒有工作。
這裏是什麼,我至今截圖:
任何提示或建議?
重述問題
你的問題有點不清楚,但是這是我想你問的是:
如何使圖表內容區域佔據可用給它的最大面積?
也許不是這樣,但無論如何,這是我在這裏回答的問題。
樣本輸出
這裏是一個小圖表的屏幕截圖:
圖表具有圍繞除去內容的所有軸,圖例,標題和填充。這允許圖表內容佔用所有可用空間,使得可以顯示非常小的圖表。默認情況下,填充標題和軸顯示將佔用足夠的空間,圖表內容本身對於非常小的圖表變得難以辨認。
示例代碼
在下面的代碼,很多事情都是有其可見性設置爲false,並且軸的首選大小設置爲0:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.stage.Stage;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
public class AreaChartSample extends Application {
@Override public void start(Stage stage) throws URISyntaxException, MalformedURLException {
stage.setTitle("Area Chart Sample");
final NumberAxis xAxis = new NumberAxis(1, 31, 1);
final NumberAxis yAxis = new NumberAxis(0, 28, 1);
xAxis.setAutoRanging(false);
xAxis.setMinorTickVisible(false);
xAxis.setTickMarkVisible(false);
xAxis.setTickLabelsVisible(false);
xAxis.setPrefSize(0, 0);
yAxis.setAutoRanging(false);
yAxis.setMinorTickVisible(false);
yAxis.setTickMarkVisible(false);
yAxis.setTickLabelsVisible(false);
yAxis.setPrefSize(0, 0);
final AreaChart<Number,Number> ac =
new AreaChart<>(xAxis,yAxis);
ac.setHorizontalGridLinesVisible(false);
ac.setVerticalGridLinesVisible(false);
ac.setLegendVisible(false);
ac.setVerticalZeroLineVisible(false);
ac.setHorizontalZeroLineVisible(false);
ac.getStylesheets().add(
getClass().getResource("unpad-chart.css").toURI().toURL().toExternalForm()
);
XYChart.Series seriesApril= new XYChart.Series();
seriesApril.setName("April");
seriesApril.getData().add(new XYChart.Data(1, 4));
seriesApril.getData().add(new XYChart.Data(3, 10));
seriesApril.getData().add(new XYChart.Data(6, 15));
seriesApril.getData().add(new XYChart.Data(9, 8));
seriesApril.getData().add(new XYChart.Data(12, 5));
seriesApril.getData().add(new XYChart.Data(15, 18));
seriesApril.getData().add(new XYChart.Data(18, 15));
seriesApril.getData().add(new XYChart.Data(21, 13));
seriesApril.getData().add(new XYChart.Data(24, 19));
seriesApril.getData().add(new XYChart.Data(27, 21));
seriesApril.getData().add(new XYChart.Data(30, 21));
seriesApril.getData().add(new XYChart.Data(31, 19));
XYChart.Series seriesMay = new XYChart.Series();
seriesMay.setName("May");
seriesMay.getData().add(new XYChart.Data(1, 20));
seriesMay.getData().add(new XYChart.Data(3, 15));
seriesMay.getData().add(new XYChart.Data(6, 13));
seriesMay.getData().add(new XYChart.Data(9, 12));
seriesMay.getData().add(new XYChart.Data(12, 14));
seriesMay.getData().add(new XYChart.Data(15, 18));
seriesMay.getData().add(new XYChart.Data(18, 25));
seriesMay.getData().add(new XYChart.Data(21, 25));
seriesMay.getData().add(new XYChart.Data(24, 23));
seriesMay.getData().add(new XYChart.Data(27, 26));
seriesMay.getData().add(new XYChart.Data(31, 26));
Scene scene = new Scene(ac,80,60);
ac.getData().addAll(seriesApril, seriesMay);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
此外,一些CSS刪除填充。將CSS文件放置在與AreaChartSample.java
相同的位置,並讓您的構建系統將其複製到構建目標目錄。
unpad-chart.css
.chart {
-fx-padding: 0px;
}
.chart-content {
-fx-padding: 0px;
}
.axis {
AXIS_COLOR: transparent;
}
.axis:top > .axis-label,
.axis:left > .axis-label {
-fx-padding: 0;
}
.axis:bottom > .axis-label,
.axis:right > .axis-label {
-fx-padding: 0;
}
佈局調試建議
modena.css
:
modena.css
是jfxrt.jar
文件中附帶的JRE。
你是什麼意思「改變這些圖表的高度低於區域高度」?你指的是哪個地區?在這種情況下「下面」是什麼意思? –
問題是,在yAxis對象上使用諸如「setMaxHeight」或「setPrefHeight」之類的方法不會影響150以下值的高度。 – null
將圖表加載到[ScenicView](http://fxexperience.com/scenic-view/ )並調試它的佈局。 – jewelsea