9

JFrame に、gridBagLayout (3 行、1 列) を使用するいくつかの JPanels が含まれています。それが私のコードです:

Container main_container = getContentPane();
GridBagLayout layout = new GridBagLayout();
main_container.setLayout(layout);
GridBagConstraints c = new GridBagConstraints();

StatoMagazzini jpanel_stato_magazzini = new StatoMagazzini();
c.gridx = 1;
c.gridy = 2;
c.fill = GridBagConstraints.BOTH;
layout.setConstraints(jpanel_stato_magazzini, c);

AcquistoLotto jpanel_acquisto = new AcquistoLotto(i, jpanel_stato_magazzini);
c.gridx = 1;
c.gridy=1;
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.FIRST_LINE_START;
layout.setConstraints(jpanel_acquisto, c);

ButtonPanel jpanel_button_panel = new ButtonPanel(i);
c.gridx=1;
c.gridy=3;
c.anchor = GridBagConstraints.CENTER;
layout.setConstraints(jpanel_button_panel, c);

main_container.add(jpanel_acquisto);
main_container.add(jpanel_stato_magazzini);
main_container.add(jpanel_button_panel);
pack();

それが結果です(醜い結果): https://docs.google.com/file/d/0Bxi2arJ2Dv9xbEo0Smd5QUN4UGc/edit?usp=sharing

上部の空のスペースを削除し、2 番目のコンポーネント (スクロール可能な JTable) を拡張します。コードをどのように変更すればよいですか?

4

2 に答える 2

37

GridBagLayout に必要以上のスペースがある場合、各セルのweightxおよびプロパティを使用して余分なスペースを分配します。weightyゼロ以外の重みプロパティを持つセルがない場合、余分なスペースはどのセルにも割り当てられず、代わりにすべてのセルが中央に配置され、適切な幅/高さにサイズ変更されます。

c.weighty = 1JTable を含むコンポーネントによって使用される制約に対して行う場合、そのコンポーネントには余分な垂直方向のスペースがすべて割り当てられます。c.weightx = 1テーブルがすべての水平方向のスペースを埋めるようにすることもできます。

于 2013-07-21T14:26:06.743 に答える
2

コンテナーのレイアウトを BorderLayout (または同等のもの) に設定し、GridBagLayout を使用して追加の JPanel を作成し、それをコンテナーに追加することができます。

Borderlayout のため、JPanel は可能な限り多くのスペースを占有します。

于 2013-07-20T20:10:56.973 に答える