3

JFrameウィンドウがあり、その中央にスクロール可能なJTableを追加したいと思います。collectionTableScrollPane()を生成するというメソッドがありますJScrollPane(これが機能することが保証されていることはわかっています)。

mainPanel次に、それをパネルに追加します。ただし、の左右に強制的に30pxのパディングを配置したいと思いますJScrollPaneJPanel論理的には、中央に配置されたホールディングを作成し、のいずれかの側をFlowLayout追加します。Box.createHorizontalStrut(30)JScrollPane

JPanel tableHolderPanel = new JPanel(new FlowLayout());
mainPanel.add(tableHolderPanel);
tableHolderPanel.add(Box.createHorizontalStrut(30));
tableHolderPanel.add(collectionTableScrollPane());
tableHolderPanel.add(Box.createHorizontalStrut(30));

ただし、ウィンドウの中央にあるJScrollPane(矢印で示されている)が無効になるという奇妙な結果が得られます。

誰かが問題が何であるか知っていますか?

1

JTableには4つの行が含まれており、そのうち2つだけが表示されていることに注意してください。

4

3 に答える 3

3

JScrollPane過去に、パネルの内側を。で使用したときに問題が発生しましたFlowLayout。コンテンツが大きくなると、水平スクロールバーが表示されるか、FlowLayoutが新しい行を追加するため、動作が難しい場合があります。

あなたの場合、私はFlowLayout:に置き換えBorderLayoutます

JPanel tableHolderPanel = new JPanel(new BorderLayout());
mainPanel.add(tableHolderPanel);
tableHolderPanel.add(Box.createHorizontalStrut(30), BorderLayout.WEST);
tableHolderPanel.add(collectionTableScrollPane(), BorderLayout.CENTER);
tableHolderPanel.add(Box.createHorizontalStrut(30), BorderLayout.EAST);
于 2012-08-28T09:17:26.010 に答える
2

私が知る限り、Boxは で使用されると想定されていますがBoxLayout、これにより問題が発生する可能性があります。代わりに、なぜEmptyBorderを使用しないのですか?tableHolderPane

于 2012-08-28T09:02:34.467 に答える
1

BoxLayoutから来たサイズを受け入れるJComponents、デフォルトのFlowLayoutpre_implementedの同じ問題JPanel

  1. ネストさPreferredSizeれたオーバーロードで返す必要があります。JPanelJScrollPane

  2. 別のものを使用してLayoutManagerくださいGridBagLayoutMigLayout

  3. and領域に 2 つの s ( を返す ei )を置く場所を使用NestedLayoutして、使用します。BorderLayoutJLabelPreferredSizeEASTWEST

  4. 本当に空の領域を作成する必要があるかどうか、およびサイズ変更可能かどうかによってすべてが異なります

于 2012-08-28T09:22:13.520 に答える