質問を少し言い換える必要があると思います。
以下の更新された質問
以下を含むJPanelがあります。
_myjpanel.setLayout(new BoxLayout(selectors, BoxLayout.PAGE_AXIS));
_
次の3つのパネルが含まれます:
固定サイズ「x」と「y」のJPanel
固定サイズのないJPanel
固定サイズがなく、高さが小さいJPanel
2番目のJPanelにはJTableが含まれているため、高さいっぱいに拡大され、下部パネルが完全に押し下げられます。
これのように:
_t
t
m
m
m
m
m
b
_
t =上部パネル、m =中央パネル、b =下部パネル。
うまくいきます。しかし、下部パネルは、問題となっている親の幅全体を埋めるようには感じられません。
_ttt
mmm
b
_
私はこれがどちらかを希望します、そこではパネルが幅全体を埋めます:
_ttt
mmm
bbb
_
またはこれ、下部パネルが左中央にある場合:
_ttt
mmm
b
_
以下の古い質問:
以下を含むJPanelがあります。
_.setLayout(new BoxLayout(selectors, BoxLayout.PAGE_AXIS));
_
その中に、さらに3つのJPanelsがあります。最初の2つは固定サイズで、中央の1つはそうではありません。
下部パネルは必要な高さだけを取得しますが、外側のJPanelの使用可能なすべての幅を使用します。
私は接着剤を使用しようとしましたが、役に立たず、優先サイズと最小/最大サイズを設定したくありません。レイアウトマネージャーとフレームワークだけを使用して、コンポーネントに「親全体の幅を埋める」ように指示する方法はありますか?サイズの設定やメソッドのオーバーライドのようなハックを始めたくありません。
注:接着剤やフィラーを内部パネルに配置することはできません。変更できるのは外部パネルとそのレイアウトマネージャーだけです。
試行1:
myPanel.setLayout(new GridLayout(3, 1));
を使用しても、期待した結果が得られませんでした。それはこのようなグリッドを作りました:
_XX
X
_
しかし、私は期待しました:
_X
X
X
_
試行2:
myPanel.setLayout(new GridLayout(0,1));
を使用しても、期待した結果が得られませんでした。それはこのようなグリッドを作りました:
_x
x
x
_
しかし、すべてのパネルは拘束を無視して同じサイズでした。
BorderLayout
を使用していて、b
パネルがSOUTH
またはPAGE_END
にある場合は、幅全体に表示されます。
最も簡単な方法は、コンポーネントを自動的にサイズ変更して親コンテナーを満たすようにするGridLayout
などの別のレイアウトマネージャーを使用することです。
myPanel.setLayout(new GridLayout(0, 1));
GridBagLayout を使用できます。そのためには、
gridBagObject.fill = GridBagConstraints.HORIZONTAL
GridBagLayoutに関連する1つの example が参考になります。
それに関連してコメントで尋ねられたように
BoxLayout は、コンポーネントの推奨サイズを尊重するもう1つの代替手段です。 GridBagLayoutがそれほど難しい場合は、それを試すことができます:-)
より明確にするために、GridBagLayoutを使用したコード:
import javax.swing.*;
import Java.awt.*;
/**
* Created with IntelliJ IDEA.
* User: Gagandeep Bali
* Date: 1/10/13
* Time: 7:43 PM
*/
public class GridBagExample
{
private void displayGUI()
{
JFrame frame = new JFrame("GridBagLayout Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
CustomPanel topPanel = new CustomPanel(Color.BLUE.darker().darker());
CustomPanel middlePanel = new CustomPanel(Color.CYAN.darker().darker());
CustomPanel bottomPanel = new CustomPanel(Color.DARK_GRAY);
JPanel contentPane = new JPanel();
contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.weighty = 0.3;
contentPane.add(topPanel, gbc);
gbc.gridy = 1;
contentPane.add(middlePanel, gbc);
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
contentPane.add(bottomPanel, gbc);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
new GridBagExample().displayGUI();
}
});
}
}
class CustomPanel extends JPanel
{
public CustomPanel(Color backGroundColour)
{
setOpaque(true);
setBackground(backGroundColour);
}
@Override
public Dimension getPreferredSize()
{
return (new Dimension(200, 150));
}
}
出力: