[수업 17일차] 21.08.25 GUI(화면구현),컨테이너, 컴포넌트, 프레임 AWT, Swing
13_GUI
package : sist
class : Ex01
x 를 눌러도 닫히지 않는 방법 ==> Terminate를 눌러 줘야한다.
* java GUI(Graphic User Interface)
* - 이미지 혹은 그래픽을 이용하여 메뉴 들을 포함하는 화면을 구성하고,
* 키보드와 마우스 등의 편리한 입력 도구를 이용하여 사용자가 입력하기
* 편하도록 만들어진 사용자 인터페이스임.
* - java에서는 AWT와 Swing 으로 어떠한 언어보다 강력한 GUI 라이브러리를 제공하여
* 소프트웨어 개발자들이 다양한 GUI를 쉽게 구성할 수 있도록 해 주고 있음.
*
*
* AWT와 Swing
* - 자바 언어는 GUI 프로그램을 쉽게 작성할 수 있도록 다양한 GUI 컴포넌트들을 제공함.
* 자바 GUI 컴포넌트는 AWT 컴포넌트와 Swing 컴포넌트로 구분이 됨.
*
*
* 1. AWT 컴포넌트 : - java.awt 패키지를 통하여 공급이 됨.
* - 운영체제의 도움을 받아 화면에 출력되기 때문에 운영체제의
* 자원을 많이 소모하여 운영체제에 많은 부담을 주게 됨.
* - 운영체제마다 컨포넌트의 모양이 다르게 나타남.
* 2. Swing 컴포넌트 : - javac.swing 패키지를 통하여 공급이 됨.
* - AWT와 다르게 자바 언어로 작성이 되었음.
* ==> Sun 사와 네스케이프라는 회사가 공동으로 개발함.
* - 운영체제의 도움을 받지 않았음. ==> 경량 컴포넌트라고 불림.
* - 운영체제와 관계없이 항상 동일한 모양이 나타남.
* - AWT에는 없는 풍부한 고급 Swing 컴포넌트들을 추가적으로
* 개발을 하였음
* - 다양하고 모양이 예쁜 Swing 컴포넌트들을 더 많이 사용함.
* ==> 최근에는 거의 모든 GUI 프로그램이 Swing 기반으로
* 작성이 됨.
*/
/*
*
* GUI에서 알아두어야 할 용어 -3가지
* 1. 컴포넌트 : 버튼, 텍스트상자, 레이블상자, 옵션박스,
* 체크박스 , 라디오버튼 등을 말함.
* 2. 컨테이너 : 컴포넌트들을 담을 수 있는 클래스.
* ==> 컴포넌트는 반드시 컨테이너에 올려져야 화면에 보여짐.
* 3. 프레임 : 컨테이너들을 담을 수 있는 클래스.
* ==> 컨테이너는 반드시 프레임에 올려져야 화면에 보여짐.
*/
/*
* Frame을 만드는 방법 - 첫번째
* 1. Frame 이라는 클래스를 상속을 받아서
* 생성자를 통하여 화면에 Frame을 보여주는 방법
package sist;
import java.awt.Frame;
/*
* java GUI(Graphic User Interface)
* - 이미지 혹은 그래픽을 이용하여 메뉴 들을 포함하는 화면을 구성하고,
* 키보드와 마우스 등의 편리한 입력 도구를 이용하여 사용자가 입력하기
* 편하도록 만들어진 사용자 인터페이스임.
* - java에서는 AWT와 Swing 으로 어떠한 언어보다 강력한 GUI 라이브러리를 제공하여
* 소프트웨어 개발자들이 다양한 GUI를 쉽게 구성할 수 있도록 해 주고 있음.
*
*
* AWT와 Swing
* - 자바 언어는 GUI 프로그램을 쉽게 작성할 수 있도록 다양한 GUI 컴포넌트들을 제공함.
* 자바 GUI 컴포넌트는 AWT 컴포넌트와 Swing 컴포넌트로 구분이 됨.
*
*
* 1. AWT 컴포넌트 : - java.awt 패키지를 통하여 공급이 됨.
* - 운영체제의 도움을 받아 화면에 출력되기 때문에 운영체제의
* 자원을 많이 소모하여 운영체제에 많은 부담을 주게 됨.
* - 운영체제마다 컨포넌트의 모양이 다르게 나타남.
* 2. Swing 컴포넌트 : - javac.swing 패키지를 통하여 공급이 됨.
* - AWT와 다르게 자바 언어로 작성이 되었음.
* ==> Sun 사와 네스케이프라는 회사가 공동으로 개발함.
* - 운영체제의 도움을 받지 않았음. ==> 경량 컴포넌트라고 불림.
* - 운영체제와 관계없이 항상 동일한 모양이 나타남.
* - AWT에는 없는 풍부한 고급 Swing 컴포넌트들을 추가적으로
* 개발을 하였음
* - 다양하고 모양이 예쁜 Swing 컴포넌트들을 더 많이 사용함.
* ==> 최근에는 거의 모든 GUI 프로그램이 Swing 기반으로
* 작성이 됨.
*/
/*
*
* GUI에서 알아두어야 할 용어 -3가지
* 1. 컴포넌트 : 버튼, 텍스트상자, 레이블상자, 옵션박스,
* 체크박스 , 라디오버튼 등을 말함.
* 2. 컨테이너 : 컴포넌트들을 담을 수 있는 클래스.
* ==> 컴포넌트는 반드시 컨테이너에 올려져야 화면에 보여짐.
* 3. 프레임 : 컨테이너들을 담을 수 있는 클래스.
* ==> 컨테이너는 반드시 프레임에 올려져야 화면에 보여짐.
*/
/*
* Frame을 만드는 방법 - 첫번째
* 1. Frame 이라는 클래스를 상속을 받아서
* 생성자를 통하여 화면에 Frame을 보여주는 방법
*/
public class Ex01_Frame extends Frame {
public Ex01_Frame() {
//프레임에 제목을 설정하는 방법
super("첫번째 예제");
// 프레임의 위치를 설정하는 방법
setLocation(200, 200); //(가로로 얼마나 띄었는지 세로로 얼마나 띄었는지)
// 프레임의 크기를 설정하는 방법
setSize(300, 300);
// 프레임을 화면에 보여주어야 함.
setVisible(true);
}
public static void main(String[] args) {
new Ex01_Frame();
}
}
13_GUI
package : sist
class : Ex02
package sist;
import java.awt.Frame;
/*
* Frame을 만드는 방법 - 두번째
* - Frame 이라는 클래스의 객체를 생성하여 사용
*/
public class Ex02_Fram {
public static void main(String[] args) {
Frame frame = new Frame("두번째 예제");
//프레임에 제목 설정
frame.setTitle("두번째 예제");
// 프레임의 위치
//frame.setLocation(200,200);
//프레임의 크기
//frame.setSize(300,300);
// 프레임의 위치 + 프레임의 크기
frame.setBounds(200, 200, 300, 300);
// 프레임을 화면에 보여주기
frame.setVisible(true);
}
}
13_GUI
package : sist
class : Ex03
x 를 누르면 닫히는 방법 ==> Terminate 불이 꺼지지않기 때문에 꺼줘야한다.
package sist;
import javax.swing.JFrame;
public class Ex03_JFrame extends JFrame{
public Ex03_JFrame() {
setTitle("세번째 예제");
setBounds(200, 200, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new Ex03_JFrame();
}
}
13_GUI
package : sist
class : Ex04
package sist;
import javax.swing.JFrame;
public class Ex04_JFrame {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setTitle("네번째 예제");
jFrame.setBounds(200, 200, 300, 300);
jFrame.setVisible(true); //(기본적으로 false값)
}
}
13_GUI
package : sist
class : Ex05
x 를 눌러도 꺼지지않음 ==> Terminate 로 꺼줘야한다.
package sist;
import java.awt.*;
public class Ex05_Button extends Frame {
public Ex05_Button() {
setTitle("Button 예제");
//컨테이너를 만들어 보자.
Panel panel = new Panel();
// 1. 컴포넌트를 만들어 보자.
Button button1 = new Button("버튼1");
// 2. 컴포넌트를 컨테이너에 올려야 한다.
panel.add(button1);
// 3. 컨테이너를 프레임에 올려야 한다.
add(panel);
setBounds(200, 200, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new Ex05_Button();
}
}
13_GUI
package : sist
class : Ex06
x 를 누르면 닫히는 방법 ==> Terminate 불이 꺼지지않기 때문에 꺼줘야한다.
package sist;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Ex06_JButton extends JFrame {
public Ex06_JButton() {
setTitle("Jbutton 예제");
//컨테이너를 만들어야 한다.
JPanel container = new JPanel();
// 1. 컴포넌트를 만들자.
JButton button1 = new JButton("버튼1");
JButton button2 = new JButton("버튼2");
JButton button3 = new JButton("버튼3");
// 2. 컨테이너에 컴포넌트를 올려야 한다.
container.add(button1);
container.add(button2);
container.add(button3);
// 3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new Ex06_JButton();
}
}
13_GUI
package : sist
class : Ex07
다중 클릭 + x 로 닫힘 + Terminate 눌러주기
package sist;
import javax.swing.*;
public class Ex07_JCheckBox extends JFrame{
public Ex07_JCheckBox() {
setTitle("JCheckBox 예제");
// 컨테이너를 만들자
JPanel contaner = new JPanel();
// 1. 컴포넌트를 만들어 보자.
//(디폴드 값으로 어떤값이 선택되어지게 나오고 싶을때는 true라고 쓰면된다.)
JCheckBox jcb1 = new JCheckBox("게임");
JCheckBox jcb2 = new JCheckBox("여행",true);
JCheckBox jcb3 = new JCheckBox("영화감상");
JCheckBox jcb4 = new JCheckBox("운동");
JCheckBox jcb5 = new JCheckBox("잠자기");
// 2. 컨테이너에 컴포넌트를 올려야 한다.
contaner.add(jcb1);contaner.add(jcb2);
contaner.add(jcb3);contaner.add(jcb4);
contaner.add(jcb5);
// 3. 프레임에 컨터이너를 올려야 한다.
add(contaner);
setBounds(200, 200, 300, 300);
setVisible(true);
}
public static void main(String[] args) {
new Ex07_JCheckBox();
}
}
13_GUI
package : sist
class : Ex08
다중 클릭 + x 로 닫힘 + 프레임 종료(Terminate 안 눌러도됨)
package sist;
import javax.swing.*;
public class Ex08_JCheckBox extends JFrame {
public Ex08_JCheckBox() {
setTitle("과일 체크박스 예제");
//컨테이너를 만들자.
JPanel container = new JPanel();
//1-1 과일 이미지 아이콘을 만들어 보자.
ImageIcon kiwi = new ImageIcon("images/kiwi.jpg");
ImageIcon mango = new ImageIcon("images/mango.jpg");
ImageIcon apple = new ImageIcon("images/apple.jpg");
//1-2 컴포넌트를 만들어 보자.
JCheckBoxMenuItem jcb1 =
new JCheckBoxMenuItem("키위", kiwi);
JCheckBoxMenuItem jcb2 =
new JCheckBoxMenuItem("망고", mango);
JCheckBoxMenuItem jcb3 =
new JCheckBoxMenuItem("사과", apple);
//2. 컨테이너에 컴포넌트를 올려야 한다.
container.add(jcb1);
container.add(jcb2); container.add(jcb3);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 600);
// 프레임의 크기를 고정시키는 메서드
setResizable(false);
// 프레임의 x버튼 클릭 시 종료시키는 메서드
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex08_JCheckBox();
}
}
13_GUI
package : sist
class : Ex09
다중 클릭 + x 로 닫힘 + 프레임 종료(Terminate 안 눌러도됨)
package sist;
import javax.swing.*;
public class Ex09_JRadioButton extends JFrame {
public Ex09_JRadioButton() {
setTitle("JRadioButton 예제");
JPanel container = new JPanel();
//1. 컴포넌트를 만들자.
JRadioButton jrb1 = new JRadioButton("게임");
JRadioButton jrb2 = new JRadioButton("여행");
JRadioButton jrb3 = new JRadioButton("운동",true);
JRadioButton jrb4 = new JRadioButton("잠자기");
// 라디오버튼은 반드시 ButtonGroup에 올려져야 한다.
//(하나만 선택이 되도록)
ButtonGroup bg = new ButtonGroup();
bg.add(jrb1);bg.add(jrb2);
bg.add(jrb3);bg.add(jrb4);
//2. 컨테이너에 컴포넌트를 올려야 한다.
container.add(jrb1);container.add(jrb2);
container.add(jrb3);container.add(jrb4);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex09_JRadioButton();
}
}
13_GUI
package : sist
class : Ex10
토글버튼 : 누르면 켜지고 또 누르면 꺼지는 버튼
package sist;
import javax.swing.*;
public class Ex10_JToggleButton extends JFrame {
public Ex10_JToggleButton() {
setTitle("JToggleButton 예제");
//컨테이너를 만들자
JPanel container = new JPanel();
//1. 컴포넌트를 만들자.
JToggleButton jtb1 = new JToggleButton("토글버튼1");
JToggleButton jtb2 = new JToggleButton("토글버튼2");
JToggleButton jtb3 = new JToggleButton("토글버튼3");
//2. 컨테이너에 컴포넌트를 올려야 한다.
container.add(jtb1);
container.add(jtb2);
container.add(jtb3);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex10_JToggleButton();
}
}
13_GUI
package : sist
class : Ex11
package sist;
import javax.swing.*;
public class Ex11_JComboBox extends JFrame{
public Ex11_JComboBox() {
setTitle("JComboBox 예제");
//컨테이너를 만들자.
JPanel container = new JPanel();
//1. 컴포넌트를 만들자.
String[] job = {"회사원", "공무원", "학생", "주부","무직","기타"};
JComboBox<String> jcb = new JComboBox<String>(job);
//JComboBox 에서 초기값을 설정하는 방법
//jcb.setSelectedIndex(3); //(어떤 인덱스를 먼저 보이게 할지)
jcb.setSelectedItem("공무원"); //(초기값으로 디폴트 되어서 나오게 하는 방법)
//2. 컨테이너에 컴포넌트르 올려야 한다.
container.add(jcb);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex11_JComboBox();
}
}
13_GUI
package : sist
class : Ex12
package sist;
import javax.swing.*;
public class Ex12_JList extends JFrame {
//(list로 뽑아내는 방식)
public Ex12_JList() {
setTitle("JList 예제");
//컨테이너를 만들자.
JPanel container = new JPanel();
//1. 컨포넌트를 만들자.
String[] job = {"회사원", "공무원", "학생", "주부","무직","기타"};
JList<String> list = new JList<String>(job);
//2. 컨테이너에 컴포넌트를 올려야 한다.
container.add(list);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex12_JList();
}
}
13_GUI
package : sist
class : Ex13
package sist;
import javax.swing.*;
public class Ex13_JLabel_JTextField extends JFrame {
public Ex13_JLabel_JTextField() {
setTitle("JLabel_JTextField 예제");
//컨테이너를 만들자
JPanel container = new JPanel();
//1. 컴포넌트를 만들자.
JLabel jl1 = new JLabel("이 름 : ");
JTextField name = new JTextField(15);//(몇자리)
JLabel jl2 = new JLabel("학 과 : ");
JTextField major = new JTextField(15);
JLabel jl3 = new JLabel("주 소 : ");
JTextField address = new JTextField(15);
//2. 컨테이너에 컴포넌트를 올려야 한다.
container.add(jl1); container.add(name);
container.add(jl2); container.add(major);
container.add(jl3); container.add(address);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 250, 200);
setVisible(true);
}
public static void main(String[] args) {
new Ex13_JLabel_JTextField();
}
}
13_GUI
package : sist
class : Ex14
package sist;
import javax.swing.*;
public class Ex14_JTable extends JFrame {
public Ex14_JTable() {
//JTable 컴포넌트는 컨테이너에 올리지 않고
// 바로 JFrame에 올려주면 된다.
//1. 컴포넌트를 만들자.
String[] header =
{"학생이름", "국어점수", "영어점수","수학점수","JAVA점수"};
String[][] contents = {
{"홍길동","94","88","90","90"},
{"이순신","90","72","89","90"},
{"유관순","91","71","90","90"},
{"김유신","88","67","78","90"},
{"김연아","97","98","90","90"},
{"강감찬","71","70","66","90"},
{"세종대왕","100","100","100","90"},
{"백종원","89","85","97","90"},
{"유재석","94","80","83","90"},
{"강호동","80","80","80","90"},
};
JTable table = new JTable(contents, header);
// 1-1. 스크롤바 기능을 만들어 보자.
JScrollPane jsp = new JScrollPane(
table, // 스크롤바가 보여질 컴포넌트
//수직으로 스크롤바를 보여줄 여부를 확인(o)
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
//수평으로 스크롤바를 보여줄 여부를 확인(x)
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
// 2. 프레임에 JTable을 올려주면 된다.
add(jsp);
setBounds(200, 200, 400, 150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex14_JTable();
}
}
13_GUI
package : sist
class : Ex15
package sist;
import java.awt.Color;
import javax.swing.*;
public class Ex15_JTabbedPane extends JFrame {
public Ex15_JTabbedPane() {
JTabbedPane tab = new JTabbedPane();
// 1. 탭의 갯수만큼 컨테이너가 있어야 한다.
JPanel container1 = new JPanel();
JPanel container2 = new JPanel();
JPanel container3 = new JPanel();
// 1-1. 컨테이너마다 배경색을 다르게 지정해 보자.
container1.setBackground(Color.ORANGE);
container2.setBackground(Color.GRAY);
container3.setBackground(Color.PINK);
// 2. 컴포넌트를 만들어 보자.
// 2-1. 첫번째 탭에 들어갈 컴포넌트를 만들어 보자.
JButton jb1 = new JButton("버튼1");
JButton jb2 = new JButton("버튼2");
JButton jb3 = new JButton("버튼3");
// 2-1-1. 첫번째 탭에 올려질 컴포넌트를 컨테이너에 올려야 한다.
container1.add(jb1);
container1.add(jb2);container1.add(jb3);
// 2-2. 두번째 탭에 들어갈 컴포넌트를 만들어 보자.
JCheckBox jcb1 = new JCheckBox("여행");
JCheckBox jcb2 = new JCheckBox("운동");
JCheckBox jcb3 = new JCheckBox("게임");
JCheckBox jcb4 = new JCheckBox("잠자기");
// 2-1-2. 두번째 탭에 올려질 컴포넌트를 컨테이너에 올려야 한다.
container2.add(jcb1);container2.add(jcb2);
container2.add(jcb3);container2.add(jcb4);
// 2-3. 세번째 탭에 들어갈 컴포넌트를 만들어 보자.
JLabel jl1 = new JLabel("이 름 : ");
JTextField name = new JTextField(15);
JLabel jl2 = new JLabel("연락처 : ");
JTextField phone = new JTextField(20);
JLabel jl3 = new JLabel("주 소 : ");
JTextField addr = new JTextField(20);
//2-1-3. 세번째 탭에 올려질 컴포넌트를 컨테이너에 올려야 한다.
container3.add(jl1);container3.add(name);
container3.add(jl2);container3.add(phone);
container3.add(jl3);container3.add(addr);
//3.각가의 컨테이너들을 탭에 올려주어야 함
tab.add("버튼 탭",container1);
tab.add("체크박스 탭",container2);
tab.add("개인정보 탭",container3);
// 4. 프레임에 탭을 올려야 한다.
add(tab);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex15_JTabbedPane();
}
}
13_GUI
package : sist
class : Ex16
메모장 처럼 만들기
메뉴 안에 옵션을 넣어준다.
package sist;
import javax.swing.*;
public class Ex16_JMenu extends JFrame {
public Ex16_JMenu() {
setTitle("메뉴");
JMenuBar bar = new JMenuBar();
// 1. 메뉴를 만들어 보자.
JMenu jMenu1 = new JMenu("파일");
JMenu jMenu2 = new JMenu("글자");
JMenu jMenu3 = new JMenu("도움말");
JMenu jMenu4 = new JMenu("글자체");
JMenu jMenu5 = new JMenu("바탕색");
// 2. 메뉴아이템을 만들어 보자.
// 2-1. "파일" 이라는 메뉴에 들어갈 메뉴아이템을 만들어 보자.
JMenuItem jmi1 = new JMenuItem("새파일");
JMenuItem jmi2 = new JMenuItem("열 기");
JMenuItem jmi3 = new JMenuItem("저 장");
JMenuItem jmi4 = new JMenuItem("종 료");
//2-2-1. "글자 -> 글자체" 라는 메뉴에 들어갈 메뉴 아이템을 만들어 보자.
JMenuItem jmi5 = new JMenuItem("굴림, 기본, 10");
JMenuItem jmi6 = new JMenuItem("궁서, 굵게, 20");
JMenuItem jmi7 = new JMenuItem("돋움, 기울기, 30");
// 2-2-2. "글자 -> 바탕색" 라는 메뉴에 들어갈 메뉴아이템을 만들어 보자.
JMenuItem jmi8 = new JMenuItem("노란색");
JMenuItem jmi9 = new JMenuItem("회 색");
JMenuItem jmi10 = new JMenuItem("초록색");
//2-3. "도움말"이라는 메뉴에 들어갈 메뉴아이템을 만들어 보자.
JMenuItem jmi11 = new JMenuItem("도움말");
JMenuItem jmi12 = new JMenuItem("메모장 정보");
// 3. 메뉴아이템(JMenuItem)을 메뉴(JMenu)에 올려주어야 한다.
// 3-1. "파일" 이라는 메뉴에 들어갈 메뉴아이템을 올리자.
jMenu1.add(jmi1); jMenu1.add(jmi2);
jMenu1.add(jmi3);
jMenu1.addSeparator();//(선)
jMenu1.add(jmi4);
//3-2. "글자체" 라는 메뉴에 들어갈 메뉴아이템을 올리자.
jMenu4.add(jmi5);jMenu4.add(jmi6);
jMenu4.add(jmi7);
jMenu2.add(jMenu4);
jMenu2.addSeparator();
jMenu5.add(jmi8);jMenu5.add(jmi9);
jMenu5.add(jmi10);
jMenu2.add(jMenu5);
// 3-3. "도움말" 메뉴에 들어갈 메뉴아이템을 올려야 한다.
jMenu3.add(jmi11);
jMenu3.addSeparator();
jMenu3.add(jmi12);
//4. 메뉴바에 메뉴들을 올려주어야 한다.
bar.add(jMenu1);bar.add(jMenu2);bar.add(jMenu3);
//5. 프레임에 메뉴바를 올려주어야 한다.
setJMenuBar(bar);//(메뉴바를 세팅한다)
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex16_JMenu();
}
}
13_GUI
package : sist
class : Ex17
package sist;
import javax.swing.*;
public class Ex17_ETC extends JFrame{
public Ex17_ETC() {
setTitle("기타 예제");
JPanel container = new JPanel();
//1. 컴포넌트를 만들어 보자.
JLabel jl1 = new JLabel("아이디 : ");
JTextField id = new JTextField(10);
JLabel jl2 = new JLabel("비밀번호 : ");
JPasswordField pwd = new JPasswordField(10);
JLabel jl3 = new JLabel("하고 싶은 말 : ");
JTextArea jta = new JTextArea(5,20);
JScrollPane jsp = new JScrollPane(
jta, // 스크롤바가 보여질 컨포넌트
//수직으로 스크롤바를 보여줄 여부를 확인(o)
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
//수평으로 스크롤바를 보여줄 여부를 확인(x)
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
//JTextArea 컴포넌트에서 자동 줄바꿈 하는 기능을 제공하는 메서드
jta.setLineWrap(true);
//2. 컨테이너에 컴포넌트를 올려야 한다.
container.add(jl1); container.add(id);
container.add(jl2); container.add(pwd);
container.add(jl3); container.add(jsp);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 250, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex17_ETC();
}
}
13_GUI
package : sist
class : Ex18
package sist;
import java.awt.FlowLayout;
import javax.swing.*;
/*
* 배치관리자(Layout)?
* - 화면(Frame)에 컴포넌트들을 배치하는 방법을 알려주는 관리자.
* - 대표적인 배치관리자의 종류
* 1) FlowLayout
* 2) BorderLayout
* 3) GridLayout
* 4) CardLayout
*
*/
/*
* 1. FlowLayout 배치관리자
* - 배치 : 좌 -> 우
* - 상단 중앙에 컴포넌트를 배치를 한다.
* - 화면에 넘칠 경우에는 바로 밑(아래) 중앙에 배치가 됨.
* - 배치관리자를 지정하지 않은 경우, default로
* FlowLayout 배치관리자로 배치를 함
*/
public class Ex18_FlowLayout extends JFrame {
public Ex18_FlowLayout() {
setTitle("FlowLayout 배치관리자");
JPanel container = new JPanel();
// 1. 컴포넌트를 만들어 보자.
JButton button1 = new JButton("버튼1");
JButton button2 = new JButton("버튼2");
JButton button3 = new JButton("버튼3");
JButton button4 = new JButton("버튼4");
// 2. 컨테이너에 컴포넌트를 올려야 한다.
// 형식) new FlowLayout() (기본생성자 호출)
// new FlowLayout(정렬 - 왼쪽, 오른쪽, 중앙(default))
// new FlowLayout(정렬, 수평간격, 수직간격)
// * 수평간격 : 좌우 컴포넌트 사이의 간격. 픽셀단위- 기본값은 5px
container.setLayout(new FlowLayout(FlowLayout.CENTER,20,10));//(배치관리자가 flowlayout이 된다)
container.add(button1); container.add(button2);
container.add(button3);container.add(button4);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex18_FlowLayout();
}
}
13_GUI
package : sist
class : Ex19
package sist;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/*
* 2. BorderLayout 배치 관리자
* - 배치 : 동쪽, 서쪽, 남쪽, 북쪽, 중앙
*/
public class Ex19_BorderLayout extends JFrame{
public Ex19_BorderLayout() {
setTitle("BorderLayout 배치관리자");
JPanel container = new JPanel();
// 1. 컴포넌트를 만들어보자.
JButton button1 = new JButton("North");
JButton button2 = new JButton("South");
JButton button3 = new JButton("East");
JButton button4 = new JButton("West");
JButton button5 = new JButton("Center");
//2. 컨테이너에 컴포넌트를 올려야 한다.
// 형식) new BorderLayout()
// new BorderLayout(수평간격, 수직간격) //(픽셀 = 해상도)
// - 수평간격 : 좌우 컴포넌트 사이의 간격(픽셀단위) - 기본값은 0
// - 수직간격 : 상하 컴포넌트 사이의 간격(픽셀단위) - 기본값은 0
container.setLayout(new BorderLayout(20,30));
container.add(button1,BorderLayout.NORTH); //컨테이너의 상단에 배치
container.add(button2,BorderLayout.SOUTH); //컨테이너의 하단에 배치
container.add(button3,BorderLayout.EAST); //컨테이너의 오른쪽에 배치
container.add(button4,BorderLayout.WEST); //컨테이너의 왼쪽에 배치
container.add(button5, BorderLayout.CENTER); //컨테이너의 중앙에 배치
// 3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex19_BorderLayout();
}
}
13_GUI
package : sist
class : Ex20
package sist;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;
/*
* 3. GridLayout 배치관리자
* - 격자 모양의 배치관리자.
* - 행과 열로 화면이 구성이 됨.
* - 기준 : 무조건 행이 기준이 됨.
*/
public class Ex20_GridLayout extends JFrame {
public Ex20_GridLayout() {
setTitle("GridLayout 배치관리자");
JPanel container = new JPanel();
// 1. 컴포넌트를 만들어 보자.
JButton button1 = new JButton("1");
JButton button2 = new JButton("2");
JButton button3 = new JButton("3");
JButton button4 = new JButton("4");
JButton button5 = new JButton("5");
JButton button6 = new JButton("6");
JButton button7 = new JButton("7");
JButton button8 = new JButton("8");
JButton button9 = new JButton("9");
JButton button10 = new JButton("*");
JButton button11 = new JButton("0");
JButton button12 = new JButton("#");
// 2. 컨테이너에 컴포넌트를 올려야 한다.
// 형식)
// new GridLayout(행 수, 열 수)
// new GridLayout(행 수, 열 수, 수평간격, 수직간격)
// 수평간격 : 좌우 컴포넌트 사이의 간격(픽셀 단위) - 기본값은 0
// 수직간격 : 상하 컴포넌트 사이의 간격(픽셀 단위) - 기본값은 0
container.setLayout(new GridLayout(4,3,5,5));//(4행3열)
container.add(button1);container.add(button2);
container.add(button3);container.add(button4);
container.add(button5);container.add(button6);
container.add(button7);container.add(button8);
container.add(button9);container.add(button10);
container.add(button11);container.add(button12);
//3. 프레임에 컨테이너를 올려야 한다.
add(container);
setBounds(200, 200, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Ex20_GridLayout();
}
}
swing.JFrame
Terminate를 안해도 닫힌다.
앞에 J자가 안붙어있음 AW사에서 제공하는
J자가 붙으면 Javx.swing 패키지에서제공
한글 입력되는 arguments (한글 폰트 깨지지 않는 방법)
properities - Arguments - VM arguments : -Dfile.encoding=MS949 입력
토글버튼
한번 누르면 켜지고 한번 더 누르면 꺼지는