JFrame 이란?
→ 기본적으로 창(윈도우)를 띄울 때 나타내는 클래스
→ 보이지 않는 창(프레임)을 생성한다.
→ 기본적으로 BorderLayout 을 가지고 있다.
(예를 들어 JButton을 만들어서 위치와 크기를 설정해서 Contianer에 부착해도 layout-manager 가 자기가 가진 룰대로 바꿔버린다.
⇒ JButton의 위치와 크기를 지정 후 부착 후 값을 출력해보면 알 수 있다.)
→ 보통 JPanel 를 만들어서 각각의 패널에 다른 Layout을 써서 하나의 Frame에 각기 다른 Layout 을 가진 Panel 들이 들어가게 한다.
setTitle(String title)
→ 프레임의 제목을 설정해준다.
→ 생성자에 넣어도 가능하다.
setSize(int width, int height)
→창의 크기를 설정해준다.
→ 오른쪽으로 갈수록 x의 값이 증가하고, 아래로 내려갈수록 y의 값이 증가한다.
→ 자바에서는 왼쪽 모서리의 좌표를 나타내며, 왼쪽 모서리(0,0)이 기본값이다.
→ 크기를 잘 모를때는 pack( ) 을 쓰면 알아서 맞는 크기를 지정해준다.
new Dimension(int width, int height) : 가로,세로를 하나로 표현한 것
→ Dimension 객체에 변수로 저장되어 있어서 출력해보면 값이 나온다.
setLocation(int x, int y)
→ 창의 위치를 설정해준다.
→ Location 은 절대적인 위치를 말한다.
→ setLocationRelativeTo(null) : 어떤 것이 잘못되었을 때 중간으로 오게 함.
new Point(int x, int y) : x, y 좌표를 하나로 표현한 것
→ Point 객체에 변수로 저장되어 있어서 출력해보면 값이 나온다.
new Rectangle(int x, int y, int width, int height) : 위치와 크기를 한번에 설정가능하다.
setBounds(Rectangle r) or setBounds(int x, int y, int width, int height)
setDefaultCloseOperation(int 상수)
→창의 종료에 대한 기능을 설정해준다.
1) JFrame.EXIT_ON_CLOSE : 프로그램 종료
2) JFrame.DISPOSE_ON_CLOSE : 해당창만 종료
3) JFrame.HIDE_ON_CLOSE : 가시성 제거(default) - 있는데 눈에만 보이지 않게 하는 것
4) JFrame.DO_NOTHING_ON_CLOSE : 아무것도 하지마라.
setVisible(boolean b)
→ 가시성을 부여해준다.
→ 보이지 않는 프레임을 생성하므로 가시성을 부여해줘야 한다.
→ 제일 마지막에 해줘야 한다.
⇒ 프레임을 만들고 있는 도중에 실행하면 만들어지는 과정을 보이게 되고 그러면 그래픽 카드 성능이 좋지않은 컴퓨터에서는 잔상이 남는다. 그러므로 모든 설정이 완료된 후에 해주는 것이 좋다.
setResizable(boolean b)
→ 창의 크기 조정 여부를 정할 수 있다.
→ boolean 값을 false로 하면 창의 크기를 고정시킬 수 있다.
→ setExtendedState(JFrame.MAXIMIZED_BOTH) : 창의 크기를 최대화(전체화면으로) 해준다.
⇒ 이때, 사이즈를 지정 해줘야한다. 지정해주지 않으면 사이즈를 줄일 때 찌그러지는 현상을 볼 수 있다.
→ add( ) : Container 에 부착시켜준다.
위 설명보고 만들어보기!
import javax.swing.JFrame;
public class MyJFrameEx1 extends JFrame{
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Title");
frame.setSize(300,300);
frame.setLocation(100, 100);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
→ JPanel 의 기본 Layout 은 FlowLayout 이다.
→ 버튼을 생성해준다.
→ 버튼 생성 시 하나하나 하면 힘들다. 그러므로 반복문을 이용해서 반복 시켜 배열로 처리해주면 된다.
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyJFrameEx1 extends JFrame{
public static void main(String[] args) {
JFrame frame = new JFrame();
JButton btn = new JButton("Button");
JPanel pnlCenter = new JPanel();
pnlCenter.add(btn);
frame.add(pnlCenter, BorderLayout.CENTER);
frame.setTitle("Title");
frame.setSize(300,300);
frame.setLocation(100, 100);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
}