컴포넌트 위치 상대적으로 정하는거 알고 있었는데 까먹음

텍스트 필드를 라벨 아래에 붙히는방법 있던거 같은데 도움좀 주면 ㄳㄳ





이렇게 만들어야하는데




이따구로 나온다



package java_Report;


import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.Insets;


import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JCheckBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;


public class ReportPanel extends JFrame{

JPanel p1a1, p1a2;

JLabel id, lbltxt, pass;

JTextField txtid, txtpass;

JCheckBox chk1, chk2;

JButton ok;

public ReportPanel(String title, int w, int h) {

setTitle(title);

setSize(w, h);

setLocationRelativeTo(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p1 = new JPanel(new FlowLayout());

p1.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

add(p1);

p1a1 = new JPanel();

id = new JLabel("Type ID");

txtid = new JTextField(10);

pass = new JLabel("Type Password");

txtpass = new JTextField(10);

p1a1.setBackground(Color.yellow);

p1.add(p1a1);

p1a1.add(id);

p1a1.add(txtid);

p1a1.add(pass);

p1a1.add(txtpass);

p1a2 = new JPanel();

lbltxt = new JLabel("Please Check!!");

chk1 = new JCheckBox("C# CheckBox");

chk2 = new JCheckBox("C++ CheckBox");

p1a2.setBackground(Color.green);

p1.add(p1a2);

p1a2.add(lbltxt);

p1a2.add(chk1);

p1a2.add(chk2);

ok = new JButton("OK");

ok.setSize(10, 10);

p1.add(ok);

setVisible(true);

}

public static void main(String[] args) {

new ReportPanel("6week Report", 300, 300);

}


}