❗️ MVC 패턴 : Model-View-Controller
- Model : 데이터를 가져와 어떤 작업을 처리하거나 처리한 작업을 저장
- View : 데이터를 보여주는 역할
- Controller : 뷰와 모델 사이의 흐름제어
AWT의 제약을 극복하기 위하여 만들어졌다.
운영 환경에 영향을 받지 않고 동일한 화면을 보여줄 수 있도록 시스템에 대한 의존도를 최소화하고 각종 컴포넌트들을 자바에서 직접 그려서 구현하였다.
따라서 여러 환경에서 동일한 모습을 보일 수 있도록 구현되었으나 대신 해당 시스템의 고유한 모습을 보여줄 수 없다.
이러한 약점을 보완하기 위하여 룩 앤드 필(Look And Feel)이라는 기능을 지원하는데 이 기능을 이용하여 프로그램 전체의 UI 모습을 바꿀 수 있다.
스윙의 아키텍처는 플랫폼-독립적인, 자바 모델-뷰-컨트롤러 GUI 프레임워크이다.
❗️ Look And Feel (룩 앤드 필)
- 마케팅, 브랜딩, 상표화와 같은 분야와 제품의 내용에 쓰이는 용어로, 사용자의 제품 체험과 겉모양, 인터페이스의 주된 기능을 나타낸다.
- 사이즈: 500 * 400
- 위치: 200, 200
- 타이틀: MyFrame1
- 종료버튼 클릭시: 현재창만 종료
- 배경색: 노랑
이렇게 기초적으로 창을 만들어보자.
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import javax.swing.JFrame;
public class FrameEx extends JFrame {
public FrameEx() {
super("MyFrame1");
// 정사각형으로 크기 정하기
setBounds(new Rectangle(200, 200, 500, 400));
// 배경색 지정하기
getContentPane().setBackground(Color.YELLOW);
// 종료버튼 클릭시 즉시 종료
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 창이 눈에 보이게 해줌
setVisible(true);
}
public static void main(String[] args) {
new FrameEx2();
}
}
JFrame.EXIT_ON_CLOSE
: 프로그램 종료
JFrame.DISPOSE_ON_CLOSE
: 해당 창만 종료
JFrame.HIDE_ON_CLOSE
: 창이 있는데 눈에 보이는 것만 제거함.
그래서 창이 계속 작동한다. = setVisible(false)
JFrame.DO_NOTHITNG_ON_CLOSE
: 창만 켜지고 아무것도 안함
(나중에 WindowListeners를 활용하여 쓰인다.)
f.setBackground(Color.RED);
이렇게만 하면 창의 색깔이 바뀌지 않는다.
이유는, 젤 뒤에있는 Frame의 색깔을 바꾼 것이다.
우리가 실제로 보는 것은 Menu Bar이기 때문에 우리가 눈에 보이는Menu Bar인 ContentPane을 바꿔주어야 한다.
f.getContentPane().setBackground(Color.RED);
Color background = new Color(0xCCCCCC);
f.getContentPane().setBackground(background);
16진수는 지원안하기 때문에 #빼고 0x를 붙여준다.
이미지 이름을 파라미터 안에 넣는다.
Toolkit kit = Toolkit.getDefaultToolkit();
Image icon = kit.getImage("dog-icon.png");
setIconImage(icon);
- 직접 중앙 메서드를 만들어준다.
public void goCenter(JFrame frame) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
frame.setLocation(
(screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2
);
} // goCenter(this)
setLocationRelativeTo(Component c)
setLocationRelativeTo(null)
은 창을 가운데에 띄우는 역할로 많이 활용된다.setExtendedState(MAXIMIZED_BOTH);
import javax.swing.JFrame;
public class FrameEx3 extends JFrame {
public FrameEx3() {
setTitle("전체화면");
// setSize를 만들어줘야지 작은창을 눌렀을 때 이 크기로 돌아온다.
setSize(400, 300);
setLocationRelativeTo(null);
//전체화면
setExtendedState(MAXIMIZED_BOTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new FrameEx3();
}
}
JLabel lblText = new JLabel("글자글자");
어디까지가 레이블인지 알려면 어떻게 알까?
색깔을 넣어봐서 알아보자.
하지만 레이블은 투명이여서 색깔을 가지지 못해서 나타내지 않는다.
그것을 불투명하게 만들어보자.
lblText.setOpaque(true); // 불투명하게 만드는 메서드
그럼 Label에 배경색을 넣어보자.
JLabel lblText = new JLabel("글자글자");
lblText.setOpaque(true);
lblText.setBackground(Color.YELLOW);
왼쪽, 중앙, 오른쪽 다된다.
JLabel lblText = new JLabel("글자글자", JLabel.CENTER); // 중간으로 이동
lblText.setForeground(Color.RED);
JPanel에 넣어서 글자색에 맞게 배경색을 맞춰주자.
//글자에 맞춰서 형광색!
JPanel pnl = new JPanel();
pnl.add(lblText);
add(pnl, BorderLayout.NORTH);
❗️ Physical and Logical Fonts
Logical Fonts은 폰트 구성이 5개이며, 자바 플랫폼에서 정의하고 있다.
자바 플랫폼에서 제공하고 있기 때문에 자바안에서 어디서든지 다 쓸 수 있다.
하지만 Logical은 영어만 해당된다. 한글은 해당X
// Font: 글자의 크기, 글꼴, 스타일
Font font = new Font(Font.SANS_SERIF, Font.BOLD, 30);
lblText.setFont(font);
Physical Fonts은 운영체제에서 구성하는 글꼴이다.
// Font: 글자의 크기, 글꼴, 스타일
Font font = new Font("휴먼옛체", Font.BOLD, 30);
lblText.setFont(font);
JLabel lblImg = new JLabel(new ImageIcon("다운로드.jpg"));
add(lblImg, BorderLayout.CENTER);
JLabel lblImg = new JLabel(new ImageIcon("20180915_191740_939786784.gif"));
add(lblImg, BorderLayout.CENTER);
//글 추가하기
lblImg.setText("무지무지빔 ~~ !");
lblImg.setHorizontalTextPosition(JLabel.CENTER); // 가운데정렬
lblImg.setVerticalTextPosition(JLabel.BOTTOM); // 밑에
References
: https://yoo11052.tistory.com/43