3

私のアプリケーションでは、JSplitPane. はJSplitPane水平に分割するように設定されています。左側には、重要ではないいくつかのコンポーネントを含むパネルがあります。右側には、内部a 、内部 a 、および aのJPanel( BoxLayout) を含むサブクラスがあります。JTextAreaJScrollPaneJTextPaneJScrollPaneJButton

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

さまざまなセットアップを試し、preferredSize と MaximumSize も設定しましたが、どれも機能していないようです。コンポーネントは、preferredSize のままです。それらを小さくしようとすると、scrollPane は機能しますが (これは問題ありません)、大きくしようとすると、優先サイズのままになります。

4

3 に答える 3

2

ほとんどの場合、問題はBoxLayout右側のパネルで使用されていることが原因です。クラス javadoc からコピーして貼り付けます。

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

同様に、垂直レイアウトの場合、BoxLayout は列内のすべてのコンポーネントを最も幅の広いコンポーネントと同じ幅にしようとします。それが失敗した場合は、X 配置に従って水平方向に配置されます。PAGE_AXIS レイアウトの場合、コンポーネントのリーディング エッジに基づいて水平方向の配置が行われます。つまり、コンテナの ComponentOrientation が左から右の場合、X 配置値 0.0 はコンポーネントの左端を意味し、それ以外の場合はコンポーネントの右端を意味します。

内部コンポーネントをスケーリングする別のレイアウトを使用します。たとえばCENTER、 a の領域にBorderLayoutはそのような動作があります。

于 2012-04-02T15:21:50.267 に答える
0

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

jTextPane.setMinimumSize(new Dimension(50, 50));
于 2015-01-31T21:58:47.603 に答える
0

個人的には、インテリジェントにスケーリングする必要があるものにはGridBagLayoutを使用します。GridBagLayout は、最初は難しそうに見えるかもしれませんが、コツをつかめばそれほど悪くはありません。MiGLayoutを試すこともできます。これは習得が容易かもしれませんが、場合によっては GridBagLayout と同じくらい冗長になる可能性があります。

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

于 2012-04-02T19:30:15.317 に答える