2

私が書いているアプリケーションの一部として、古い(重い)Canvasをswingコンポーネントと混合する必要があります。具体的には、それらをJSplitPane内にネストします。ただし、これを行うと、どちらのキャンバスもサイズの縮小を受け入れないかのように、仕切りはどこでもサイズ変更を拒否します。したがって、問題を示すコードは次のとおりです。

JFrame frame = new JFrame();
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new Canvas(), new Canvas());
pane.setResizeWeight(0.5);
frame.add(pane);
frame.pack();
frame.setVisible(true);

私は当初、これは簡単に解決できると思っていましたが、かなりの調査を行った後、オプションは次のように表示されます。

  • 代わりにJPanelを使用してください(vlcjを使用してキャンバスに直接レンダリングする場合のように常にオプションとは限りません)
  • 場合によっては機能する可能性のあるx危険なハックを挿入します

これを行うためのより良い方法はありますか?それとも、それは本当にハッキングに頼る場合ですか?代替のSplitPane実装が機能するかどうかなど、他のオプションについても議論しましたが、重量のある実装はなく、軽量の実装で問題が回避された場合は驚きます。

4

1 に答える 1

6

JSplitPane は、コンポーネントの「最小サイズ」を使用して、仕切りを使用するときにコンポーネントを縮小できるかどうかを判断します。

これまでキャンバスを使用したことはありませんが、最小サイズは常に既定のサイズに設定されているようです。

Canvas の getMinimumSize(...) size メソッドをオーバーライドして、妥当な最小値を返します。

簡単なテキストの場合は、次を使用できます。

Canvas canvas = new Canvas();
canvas.setMinimumSize( new Dimension(50, 50) );
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, canvas, new Canvas());

仕切りを左に移動することはできますが、右に戻すことはできません。

于 2011-07-18T03:20:38.610 に答える