0

ラベルで満たされたグリッドを構築しています。それらの 1 つは html-text を含み、最大形式にサイズ変更してスクロール可能にする必要があります。JScrollPane を追加する方法を見つけましたが、1 行の高さのままです。400x400 のサイズを指定しても、サイズを変更する方法が見つかりません ...

getViewport() を削除しても同じ結果になります。

JPanel grid = new JPanel(new GridLayout(1,2));

// first cell of the grid
grid.add(new JLabel("title"));

// second cell of the grid, this should be the scrollable one   
JScrollPane scroll = new JScrollPane();
scroll.getViewport().setSize(400, 400);
scroll.getViewport().add(new JLabel("<html>long<br>html<br>text</html>"));
grid.add(scrollVersion, BorderLayout.CENTER);   

何か案は ?

どうもありがとう ...

4

3 に答える 3

1

GridLayout は、レイアウトするコンポーネントの優先サイズを考慮しません。すべてのグリッド セルを同じサイズにすることを目的としています。別の方法として GridBagLayout を使用することもできますが、個人的には、ZoneLayoutをお勧めします。ZoneLayout の方が (私の意見では) シンプルで、同じくらい強力で、はるかに直感的です。チートシートを使えば、間違いはありません。

補足として、BorderLayout.CENTER は BorderLayout に使用される制約であり、GridLayout とは互換性がありません。コンポーネントが GridLayout の所有者に追加される場合、制約を提供する必要はありません。コンポーネントは、GridLayout を使用して、左上隅のセルから開始して左から右に追加されます。

于 2010-07-19T11:47:55.037 に答える
0

GridLayout のすべてのセルは同じサイズになるように設計されているため、1 つを他のセルよりも大きくしたい場合は、Riduel が提案する GridBagLayout のように、別の LayoutManager を使用する必要があります。

また、JLabel に複数の行が含まれる場合は、編集不可の JTextPane または JTextArea に置き換えることをお勧めします。

于 2010-07-19T11:28:12.280 に答える
0

GridLayout をGridBagLayoutに置き換えます。正しい制約のセットがあれば、魅力的に機能するはずです。GridBagLayout は非常に複雑に見えますが、いくつかの例では単純です。

于 2010-07-19T10:05:10.593 に答える