2012-04-03 1 views
1

私はJavaでかなり面倒な問題に遭遇しました。私はJavaで一連のシミュレーションを実行するプログラムを持っています。生成されるデータはたくさんあり、すべてが "グラフ"オブジェクトに表示されています。 GroupLayoutを使ってこれらの "グラフ"オブジェクトの長いリストを表示し、それをJscrollpaneの中に配置する "Graphs"というコンポーネントを作成しました。Javaコンポーネントの最大サイズ

私が抱えている問題は、「グラフ」の最後の半分が途切れていることです。コンポーネントが到達できる最大サイズは32,767 2^15 - 1(符号付き16ビット数の最大サイズ)と同じです。私が最初に思ったように、コンポーネントのサイズは16ビットの符号付き数値であり、32ビットの整数ではないように見えます。

私はこのように質問しています。

javaがコンポーネントのサイズを格納する方法を変更する方法はありますか?したがって、このサイズより大きなコンポーネントを作成する方法はありますか?

この問題に取り組むにはどうすればよいでしょうか?この情報をすべて1つのパネルに表示したいと思います。たとえ "Graph"コンポーネントを互いに積み重ねても、親コンポーネントは最大サイズ外になります。

ありがとうございます。

Chris。

+0

ロングショットかもしれませんが、 'Graph'クラスをサブクラス化し、メンバーのデータ型を大きくする(BigInteger)ことができますか?それがオプションでないなら、私の謝罪。 – collinjsimpson

答えて

2

Why doesn't Java support unsigned ints?を参照してください。

グラフをJListまたはJTableに表示することで、この制限を回避することができます。 JList/JTableは、現在表示されているセルのみをレンダリングします。理想的には、グラフの値をListModelまたはTableModelにそれぞれ格納し、対応するカスタムListCellRendererまたはTableCellRendererを実装するのが理想的です。

あなただけの概念実証の最初のをしたい場合は、あなたがグラフComponentの直接DefaultListModelまたはDefaultTableModelに突き出すと、そのget*CellRendererComponent(...)方法グラフを返すレンダラを使用することができます。

+0

すべてがJListにあっても画面上に表示されているものだけをレンダリングしているように、これがどのように問題を解決するかはわかりません。リストはまだ大きなサイズでなければならず、ScrollPane内に配置されます。 – Chris192

+0

JList/JTableが巨大なパネル内のすべてのセルをレイアウトしていて、巨大なパネルの一部だけを表示するためにビューポートを使用すると仮定しているようです。幸いにも、そうではありません。ビューポートに表示されるアイテムm..nの場合、JListはレンダラーの単一のインスタンスを使用してそれらのアイテムを「スタンプ」またはペイントします。他の答えを読み返した後、私はMartijnが醜い詳細を抽象化する組み込みのAPIを使わずに、あなたが似たようなことをしていることを示唆していると思います。 – rob

+0

問題が修正されました。ありがとうございます。 – Chris192

1

私はこのアプローチが達成するのが少し難しいかもしれないが、それはあなたの進歩的なアプローチよりもうまくいくことを知っている。スクロールペインではなく、グラフの横にスクロールバーを追加してみてください。スクロールバーにリスナーを追加して、スクロールバーの位置に応じて、グラフの内容を動的に更新します。

+0

これは単なるグラフではありません。それは長いグラフのリストです。 :S しかし、そのアプローチはうまくいくかもしれません:P。 – Chris192

+0

なぜそれが違いますか? –

+0

それはないでしょう、公正な点。 – Chris192