2011-12-18 9 views
0

私はJFreeChartを使用して自分のアプリケーションにtimeseriesチャートを作成しています。
私は設定しています、それはだ、ドメイン軸を手動で使用して範囲: jfreechartでズームアウトした後の手動ドメイン軸範囲を復元する

... 
    plot.getDomainAxis().setAutoRange(false); 
    Calendar c1=Calendar.getInstance(); 
    c1.set(Calendar.HOUR_OF_DAY, 10); 
    c1.set(Calendar.MINUTE, 0); 
    Calendar c2=Calendar.getInstance(); 
    c2.set(Calendar.HOUR_OF_DAY, 18); 
    c2.set(Calendar.MINUTE, 0); 
    plot.getDomainAxis().setRange(c1.getTimeInMillis(),c2.getTimeInMillis()); 
    ... 

グラフにズームインし、その後、一連の境界とする領域軸の範囲の変更を行い、両方の軸に AutoRangeをトリガー(chartplot自体にマウスを使用して)ズームアウト私自身の手作業による怒りではありません。

例(ドメイン軸の範囲を見てください):
をして、ズームアウトする前に(正):
enter image description here

を(オート及ん正しくないが、ある)で、ズームアウト後:
enter image description here

手動で設定した範囲にズームアウトするにはどうすればよいですか?

おかげ

+0

あなたが説明している問題を示す[sscce](http://sscce.org/)を入力してください。 – trashgod

+0

こんにちは、それを編集してSSCCEにしようとしました。 – RYN

答えて

2

あなたのカスタムドメインの設定に続いて、hereを示し、restoreAutoBounds()を試してみてください。

補足:表示される動作は、マウスリスナの実装ChartPanelで定義されています。 chartProgress()を無効にして、グラフの描画が終了し、ズームされていないときにドメイン軸を復元することができます。ここ

+0

しかしこれはカスタムレンジが必要なときに 'AutoRange'を実行します! – RYN

+0

私は上記で詳述しようとしましたが、まだあなたの[sscce](http://sscce.org/)は含まれていません。 – trashgod

0

ソリューション:

class MyNumberAxis extends org.jfree.chart.axis.NumberAxis 
{ 
    private boolean m_RestoreDefaultAutoRange; 

    MyNumberAxis() 
    { 
     super(); 
    } 

    MyNumberAxis(String label) 
    { 
     super(label); 
    } 

    MyNumberAxis(String label, boolean restoreDefaulAutoRange) 
    { 
     super(label); 
     m_RestoreDefaultAutoRange = restoreDefaulAutoRange; 
    } 

    @Override 
    protected void autoAdjustRange() 
    { 
     if(m_RestoreDefaultAutoRange) 
     { 
      Plot plot = getPlot(); 
      if(plot != null && plot instanceof ValueAxisPlot) 
      { 
       Range r = getDefaultAutoRange(); 
       setRange(r, false, false); 
      } 
     } 
     else 
      super.autoAdjustRange(); 
    } 
} 

がtrueにブール値を設定MyNumberAxisのインスタンスを作成し、プロット(plot.setRangeAxis()メソッド)にそれを使用します。デフォルトのNumberAxisのように動作させたい場合は、falseをbooleanとして渡します。

0

上記のMagalloのソリューションはうまく機能しました。

MyNumberAxis(String label, boolean restoreDefaulAutoRange, Range defaultRange) { 
    super(label); 
    m_RestoreDefaultAutoRange = restoreDefaulAutoRange; 
    setDefaultAutoRange(defaultRange); 
} 
関連する問題