2011-10-27 13 views
4

私のアプリケーションでは、内部的には0からの範囲の値があります。しかし、ユーザーはこの範囲を1から開始しなければなりません。 。この場合、JSpinnerコンポーネントです。オフセットがある場合はコンストラクタで指定することができます(すべての値にそのオフセットがあるわけではありません)。しかし、私はそれ(+1は単なるテストのためである)のようなものであることをJava:いくつかのオフセットでJSpinnerの表示値を作るにはどうすればいいですか

 public Object getValue() { 
      Number value = (Number)super.getValue(); 
      Number newValue=value; 
      if (value instanceof Double){ 
       newValue=value.doubleValue()+1; 
      } 
      else if (value instanceof Integer){ 
       newValue = value.intValue()+1; 
      } 
      return newValue; 
     } 

をモデルにするJSpinnerのgetValue()またはgetValue()をオーバーライドする場合、それは無限ループに入ります。私は、ここで何らかの理由で国家変更イベントが発生すると思う。 getValueをもう一度呼び出し、さらに増分し、イベントを発生させ、増分などを行います。 これはどのように解決できますか?おかげ

答えて

4

は、あなたのプログラムのデータモデルとスピナーの数値モデルを混ぜるないことを行うことができると思います。それらを分離してください。正しいプレゼンテーション範囲を持つプライベートSpinnerNumberModelに代理人に、1 .. n。 0 .. n -1の値を返すアクセサを提供します。

すべてのクライアントがgetValue()の代わりに使用する必要があることを、基本的にgetValue()-offsetある方法getAdjustedValue()を、提供されるものですか。

はい。 SpinnerModelJSpinnerビューを提供します。アプリケーションのモデルで異なる単位が使用されている場合、変換が行われる必要があります。それが最も理にかなっている場所を決めなければなりません。具体的な例として、modelControlPanelには、周波数をHzに調整するスピナーがあり、アプリケーションのTimerにはミリ秒単位の期間が必要です。

+0

したがって、オフセットがある場合、JSpinnerは 'value + offset'を' SpinnerNumberModel'に渡し、基本的に 'getValue() - offset'メソッドである' getAdjustedValue'メソッドを提供します。あなたは正しいことを理解しましたか? –

+0

私は上記で詳しく述べました。 – trashgod

+1

ありがとう、それは正しい道に私を得た –

2
+0

あなたはそれを詳しく説明できますか?私はそれがどのように役立つのかわかりません –

+0

@Boris Mikhaylovはそれについて 'それは無限ループに入ります.'それで、あなたはそれをいくつかの範囲に収めることができます – mKorbel

+0

しかし、全体のポイントはただ一度値を増やすことです –

関連する問題