1. Swing
GUI를 프로그래밍 할 수 있도록 작업 가능한 패키지
2. Swing 프로임 만들기
import javax.swing.JFrame;
public class swing1 extends JFrame{
public swing1() {
setTitle("스윙 프레임 만들기"); //창 상단 타이틀 설정
setSize(500,500); //창 사이즈
//프레임이 닫힐 때 프로세스 같이 종료 없으면 프로세스 살이있음
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true); //설정한 frame 보이기
}
public static void main(String[] args) {
swing1 frame = new swing1(); //swing1 생성자 호출
}
}
3. Swing Pane
public class swing1 extends JFrame{
public swing1() {
setTitle("스윙 프레임 만들기");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = getContentPane();
container.setBackground(Color.ORANGE);
container.setLayout(new FlowLayout());
//FlowLayout : 컴포넌트가 삽입되는 순서대로 인쪽부터 배치
//배치할 공간이 없으면 내려와서 반복
container.add(new JButton("OK")); //패널에 버튼 붙이기
container.add(new JButton("Cancel"));
container.add(new JButton("Ignore"));
setVisible(true);
}
public static void main(String[] args) {
swing1 frame = new swing1();
}
}

배치 관리자 대표유형
- FlowLayout : 컴포넌트가 삽입되는 순서대로 왼쪽부터 배치, 배치할 공간이 없으면 아래로 내려와 반복한다.
- BordeLayout : 컨테이너의 공간을 동,서, 남, 북, 중앙 5개 영역으로 나눈다
- GridLayout : 컨테이너를 프로그램에서 설정한 동일한 크기의 2차원 격자로 나눈다, 배치 형식은 FlowLayout과 동일
- CardLayout : 컨테이너의 공간에 카드를 쌓아 놓듯이 컴포넌트를 포개어 배치
4. Swing Button ActionListener
public class swing1 extends JFrame{
public swing1() {
setTitle("스윙 프레임 만들기");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
JTextField txtNum1 = new JTextField(20);
txtNum1.setBounds(10,10,200,25);
this.add(txtNum1);
JTextField txtNum2 = new JTextField(20);
txtNum2.setBounds(10,50,200,25);
this.add(txtNum2);
JLabel lblResult = new JLabel("결과출력");
lblResult.setBounds(10,90,200,25);
this.add(lblResult);
JButton btnAdd = new JButton("Plus");
btnAdd.setBounds(10,130,200,25);
this.add(btnAdd);
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
double n1 = Double.parseDouble(txtNum1.getText().toString());
double n2 = Double.parseDouble(txtNum2.getText().toString());
double sum = n1+n2;
lblResult.setText(sum+"");
}
});
setVisible(true);
}
public static void main(String[] args) {
swing1 frame = new swing1();
}
}

5. Swing 계산기
public class swing1 extends JFrame implements ActionListener{
JTextField txtNum1;
JTextField txtNum2;
JLabel lblResult;
String[] op = new String[] {"+","-","*","/","%"};
public swing1() {
setTitle("계산");
setSize(500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
txtNum1 = new JTextField(20);
txtNum1.setBounds(10,10,200,25);
this.add(txtNum1);
txtNum2 = new JTextField(20);
txtNum2.setBounds(10,50,200,25);
this.add(txtNum2);
lblResult = new JLabel("결과출력");
lblResult.setBounds(10,90,200,25);
this.add(lblResult);
JButton btns[] = new JButton[op.length];
for(int i =0;i<op.length;i++) {
btns[i] = new JButton();
btns[i].setBounds(10,i*30+150,200,25);
btns[i].setText(op[i]);
this.add(btns[i]);
btns[i].addActionListener(this);
}
setVisible(true);
}
public static void main(String[] args) {
swing1 frame = new swing1();
}
@Override
public void actionPerformed(ActionEvent e) {
double a = Double.parseDouble(txtNum1.getText().toString());
double b = Double.parseDouble(txtNum2.getText().toString());
double result = 0;
switch (e.getActionCommand()) {
case "+":
result=a+b;
break;
case "-":
result=a-b;
break;
case "*":
result=a*b;
break;
case "/":
result=a/b;
break;
case "%":
result=a%b;
break;
}
lblResult.setText(result+"");
}
}