2017-07-21 61 views
1

グラフのサイズを変更する際に、軸目盛りラベルのフォントサイズもスケーリングされます。たとえば、グラフが小さすぎるとテキストが小さくなりますが、グラフが大きい場合はキャプションが拡大されます。軸目盛ラベルフォントの固定サイズの設定方法は?

たとえば、データセットとフォントサイズのプロパティは同じで、グラフのサイズが異なる2つの類似のグラフを作成すると、描画されるキャプションの有効なサイズが異なります。

この機能を無効にすることは可能ですか?私は、軸の目盛りのラベルの固定フォントサイズを設定したい、または少なくとも大きくなっていません。ここで

は、この問題を提示したコードです:はJFreeChartは、常に利用可能なスペースを埋めるために、所定のグラフ要素を拡張しようとし

import java.awt.Container; 
import java.awt.Dimension; 
import java.util.Calendar; 
import java.util.Date; 

import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.time.Hour; 
import org.jfree.data.time.ohlc.OHLCItem; 
import org.jfree.data.time.ohlc.OHLCSeries; 
import org.jfree.data.time.ohlc.OHLCSeriesCollection; 

public class ChartExample extends JFrame { 

    public ChartExample() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     OHLCSeriesCollection dataset = createDataSet(); 

     // First chart 
     JFreeChart chart = ChartFactory.createCandlestickChart("", null, null, dataset, true); 
     chart.getXYPlot().setOrientation(PlotOrientation.VERTICAL); 
     ChartPanel chartPanel = new ChartPanel(chart); 
     chartPanel.setPreferredSize(new Dimension(800, 500)); 

     // Second chart 
     JFreeChart chart2 = ChartFactory.createCandlestickChart("", null, null, dataset, true); 
     chart2.getXYPlot().setOrientation(PlotOrientation.VERTICAL); 
     ChartPanel chartPanel2 = new ChartPanel(chart2); 
     chartPanel2.setPreferredSize(new Dimension(40, 100)); 

     Container pane = getContentPane(); 
     pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); 
     pane.add(chartPanel); 
     pane.add(chartPanel2); 
    } 

    private OHLCSeriesCollection createDataSet() { 

     OHLCSeries series = new OHLCSeries("series"); 

     Calendar cal = Calendar.getInstance(); 
     cal.setTime(new Date()); 

     for (int i = 10; i < 25; i++) { 
      cal.add(Calendar.HOUR_OF_DAY, 1); 
      series.add(new OHLCItem(new Hour(cal.getTime()), i, 2 * i, 1, i/2)); 
     } 

     OHLCSeriesCollection dataset = new OHLCSeriesCollection(); 
     dataset.addSeries(series); 
     return dataset; 
    } 

    public static void main(final String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      ChartExample demo = new ChartExample(); 
      demo.pack(); 
      demo.setVisible(true); 
     }); 
    } 
} 
+0

私は[タグ:スイング]追加しました私は、これは部分的なレイアウトの問題であると考えているように、タグを。 – trashgod

答えて

1

。その空間を制御するいくつかの方法が調べられますhere。 の特定のケースでは、Box Layout Featuresに記載されているように、囲まれたコンポーネントの適切な高さに基づいて、上から下のボックスレイアウトでどのように垂直スペースが分配されるかに注意してください。

下の例のバリエーションでは、利用可能な縦のスペースを最大にするために、凡例をRIGHTに移動しました。私はまた、任意の許容可能な最小サイズを指定し、優先サイズを最小値以上の値に固定しました。 growfalseのときは、「少なくとも軸の目盛ラベルのサイズを大きくしない」ことを条件として、createChart()も条件付きで最大の高さをクリップします。

image

import java.awt.Dimension; 
import java.util.Calendar; 
import java.util.Date; 

import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.plot.PlotOrientation; 
import org.jfree.data.time.Hour; 
import org.jfree.data.time.ohlc.OHLCItem; 
import org.jfree.data.time.ohlc.OHLCSeries; 
import org.jfree.data.time.ohlc.OHLCSeriesCollection; 
import org.jfree.ui.RectangleEdge; 

/** @see https://stackoverflow.com/q/45242263/230513 */ 
public class ChartExample extends JFrame { 

    public ChartExample() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)); 
     add(createChart(640, 400, true)); 
     add(createChart(640, 100, false)); 
    } 

    private ChartPanel createChart(int w, int h, boolean grow) { 
     JFreeChart chart = ChartFactory.createCandlestickChart(
      "", null, null, createDataSet(), true); 
     chart.getXYPlot().setOrientation(PlotOrientation.VERTICAL); 
     chart.getLegend().setPosition(RectangleEdge.RIGHT); 
     ChartPanel chartPanel = new ChartPanel(chart){ 

      private static final int H = 175; 

      @Override 
      public Dimension getPreferredSize() { 
       return new Dimension(w, Math.max(h, H)); 
      } 

      @Override 
      public Dimension getMinimumSize() { 
       return new Dimension(w, H); 
      } 

      @Override 
      public Dimension getMaximumSize() { 
       if (!grow) return new Dimension(w, H); 
       return super.getMaximumSize(); 
      } 
     }; 
     return chartPanel; 
    } 

    private OHLCSeriesCollection createDataSet() { 
     OHLCSeries series = new OHLCSeries("series"); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(new Date()); 
     for (int i = 10; i < 25; i++) { 
      cal.add(Calendar.HOUR_OF_DAY, 1); 
      series.add(new OHLCItem(new Hour(cal.getTime()), i, 2 * i, 1, i/2)); 
     } 
     OHLCSeriesCollection dataset = new OHLCSeriesCollection(); 
     dataset.addSeries(series); 
     return dataset; 
    } 

    public static void main(final String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      ChartExample demo = new ChartExample(); 
      demo.pack(); 
      demo.setVisible(true); 
     }); 
    } 
} 
+0

これは機能しません。アプリを2回実行してみてください。最初にデフォルトサイズで最大化と2番目の法線を実行します。キャプションのサイズは明らかに異なります。フォントの変更のアプリケーションサイズを変更している間は明らかです。 – hal

+0

修正。必要な機能はサポートされていません。 – trashgod

+0

正しい。必要な機能はサポートされていませんが、私は[少なくとも更新されました](https://stackoverflow.com/posts/45254091/revisions)、「少なくとも大きくなっていません」という例を示しています。 – trashgod

関連する問題