2012-04-02 5 views
3

私のアプリケーションでは、JSplitPaneを含むフレームを取得しました。 JSplitPaneは水平に分割されるように設定されています。左側には、関係のないいくつかのコンポーネントが含まれたパネルがあります。 右側にJScrollPaneJTextPaneJScrollPane、およびJButtonの内部にサブタイプJTextAreaを含むJPanelBoxLayout)があります。JSplitPaneをJTextAreaで使用する

私の問題は、私がするJSplitPaneとの相互作用 に基づいて、サイズを変更するコンポーネント(主に右側)を取得する方法です。 JSplitPaneを左にドラッグすると、 JTextAreaとJTextPaneが広くなります。

私は別の設定を試して、preferredSizeとMaximumSizeも設定しましたが、これはうまくいかないようです。コンポーネントは、それらのpreferredSizeにとどまります。私はそれらを小さくしようとするとscrollPaneが動作します(これは問題ありません)が、私がそれらを大きくしようとすると、彼らは好みのサイズにとどまります。

+0

java swing、私はそれを使用したときに悪夢を取得するために使用されました。 [shudders ...] o_O – ApprenticeHacker

+0

まあ私はほぼ完了しているので、他のオプションを見つけることは本当に良いアイデアではありません^^ – Giannis

+0

+1あなたの決定と信念のため。何かをJavaスイングで使えるようにすることは、私の意見では貴重な賞品に値します。 – ApprenticeHacker

答えて

2

ほとんどの場合、問題は右パネルでBoxLayoutが原因である可能性があります。クラスからコピー&ペーストjavadoc:

BoxLayoutは、コンポーネントを希望の幅(水平レイアウト用)または高さ(垂直レイアウト用)に配置しようとします。水平レイアウトの場合、すべてのコンポーネントが同じ高さでない場合、BoxLayoutはすべてのコンポーネントを最高のコンポーネントと同じ高さにしようとします。特定のコンポーネントでそれが不可能な場合、BoxLayoutはそのコンポーネントをYの配置に従って垂直に整列させます。デフォルトでは、コンポーネントのYアライメントは0.5です。つまり、コンポーネントの垂直中心は、0.5 Yアライメントの他のコンポーネントの垂直中心と同じY座標を持つ必要があります。

同様に、垂直レイアウトの場合、BoxLayoutは、列内のすべてのコンポーネントを最も幅の広いコンポーネントとして作成しようとします。それが失敗すると、それらはXのアラインメントに従って水平に整列します。 PAGE_AXISレイアウトの場合、水平方向の配置はコンポーネントの前縁に基づいて行われます。つまり、Xの配置値が0.0の場合、コンテナのComponentOrientationが左から右にあり、それ以外の場合はコンポーネントの右端を意味するコンポーネントの左端を意味します。

内部コンポーネントを拡大/縮小する別のレイアウトを使用します。例えば、BorderLayoutCENTER領域にこのような動作があります。

+0

試してみました。まったく同じ動作。 – Giannis

+0

JScrollPaneを問題にすることはできますか? textArea/textPaneはJScrollPaneなしでは実行できませんが、 – Giannis

+0

空のパネルが1つあれば問題を引き起こしていました。レイアウトが役立つかもしれませんが。ありがとう! – Giannis

0

個人的には、私はインテリジェントにスケールする必要があるものについては、GridBagLayoutを使用します。 GridBagLayoutは最初は威圧しているように見えますが、一度それを掛けてしまえばそれほど悪くはありません。 MiGLayoutを試すこともできます。これは学習が簡単な場合もありますが、GridBagLayoutほど冗長になることもあります。

GridBagLayoutまたはMiGLayoutのすべてのニュアンスを習得したくない場合は、WindowBuilderプラグインをEclipseにインストールし、WindowBuilderのSwing DesignerウィザードとWYSIWYGエディタを使用してレイアウトを設定できます。

+0

私は働くことを得ました。問題を引き起こしていたのは、私がサイズを変更しようとしていたJPanelが別のJPanelにあったということでした。外側パネルが取り外されると、それは機能した。私はGridBagLayoutを使っていくつかのテストを行うだけで、それを知ることができます。乾杯。 – Giannis

0

私にとっては、JTextAreaに0以外の最小サイズを設定するだけで、BoxLayoutでJTextAreaを使用するときにJSplitPaneのサイズを変更できないという問題を解決しました。

jTextPane.setMinimumSize(new Dimension(50, 50)); 
関連する問題