1

BorderLayoutセルを埋めるパネルを内部に作成する簡単な方法はありますか?

これは簡単な例です。灰色のパネル ( pnlTitle) を含むセル (100 ピクセル) と同じ幅にしたいのですが、次のようなものなしでやりたいです。pnlTitle.setPreferredSize(new Dimension(100, 20));

コードは次のとおりです。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestCode2_InsideColumn {

public static void main(String[] args) {

    JFrame window = new JFrame("Test");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(400, 200);
    window.setMinimumSize(new Dimension(350, 150));

    JPanel panelMain = new JPanel(new BorderLayout());
    window.add(panelMain);

    JLabel labelN = new JLabel("North");
    panelMain.add(labelN, BorderLayout.NORTH);

    JLabel labelS = new JLabel("South");
    panelMain.add(labelS, BorderLayout.SOUTH);

    GridBagLayout innerLayout = new GridBagLayout();
    GridBagConstraints innerConstraints = new GridBagConstraints();

    //Second (and last) column won't have fixed size, so last number is useless
    innerLayout.columnWidths = new int[] {100, 100};

    JPanel innerPanel = new JPanel(innerLayout);
    innerPanel.setBackground(new Color(0, 220, 250));
    panelMain.add(innerPanel, BorderLayout.CENTER);

    innerConstraints.anchor = GridBagConstraints.NORTHWEST;
    innerConstraints.weightx = 0.0;
    innerConstraints.weighty = 0.0;
    innerConstraints.gridx = 0;
    innerConstraints.gridy = 0;

    JLabel lblTitle = new JLabel("Title");
    JPanel pnlTitle = new JPanel(new BorderLayout());
    pnlTitle.add(lblTitle);
    innerLayout.setConstraints(pnlTitle, innerConstraints);
    innerPanel.add(pnlTitle);

    innerConstraints.gridx = 1;
    innerConstraints.weightx = 1.0;
    innerConstraints.fill = GridBagConstraints.HORIZONTAL;
    JLabel lblDescription = new JLabel("Label");
    innerLayout.setConstraints(lblDescription, innerConstraints);
    innerPanel.add(lblDescription);

    window.setVisible(true);
}

}
4

1 に答える 1