2016-12-06 27 views
2

非常直截了當的問題:如何讓圖表內容區域佔據可用的最大區域?如何使圖表內容區佔據可用的最大區域?

我正在使用JavaFX。在我的情況下,我想根據真/假yAxis(0/1)有許多AreaCharts。不幸的是,我找不到解決方案如何使用yAxis或AreaChart對象上的方法setMaxHeightsetPrefHeight更改這些圖表的內容高度。

我已經嘗試了幾個SO的答案,但都沒有工作。

這裏是什麼,我至今截圖:

enter image description here

任何提示或建議?

+0

你是什麼意思「改變這些圖表的高度低於區域高度」?你指的是哪個地區?在這種情況下「下面」是什麼意思? –

+0

問題是,在yAxis對象上使用諸如「setMaxHeight」或「setPrefHeight」之類的方法不會影響150以下值的高度。 – null

+0

將圖表加載到[ScenicView](http://fxexperience.com/scenic-view/ )並調試它的佈局。 – jewelsea

回答

1

重述問題

你的問題有點不清楚,但是這是我想你問的是:

如何使圖表內容區域佔據可用給它的最大面積?

也許不是這樣,但無論如何,這是我在這裏回答的問題。

樣本輸出

這裏是一個小圖表的屏幕截圖:

small chart

圖表具有圍繞除去內容的所有軸,圖例,標題和填充。這允許圖表內容佔用所有可用空間,使得可以顯示非常小的圖表。默認情況下,填充標題和軸顯示將佔用足夠的空間,圖表內容本身對於非常小的圖表變得難以辨認。

示例代碼

在下面的代碼,很多事情都是有其可見性設置爲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; 
} 

佈局調試建議

  • 要調試的佈局問題,使用ScenicView
  • 要確定默認的CSS樣式來覆蓋,審覈modena.css
    • 對Java 8,modena.cssjfxrt.jar文件中附帶的JRE。