자바 9장) 자바 GUI / GUI 패키지 / 스윙 GUI 프로그램 / 컨테이너와 배치 / 배치 관리자들

GUI란?

GUI = Graphical User Interface : 사용자가 컴퓨터와 정보를 교환할 때 그래픽을 통해 작업할 수 있는 인터페이스. 마우스 등을 이용하여 화면에 있는 메뉴를 선택하여 작업을 할 수 있다. * 자바는 AWT와 Swing 패키지와 같은 GUI 라이브러리를 제공한다> 그런데 스윙 사용을 권장하는 AWT

AWT = Abstract Windowing Toolkitㄴ 패키지 : 자바.awt * 중량 컴포넌트 : AWT의 컴포넌트 = 운영체제의 도움을 받아 화면에 출력되므로 운영체제에 부담이 됨,, ex) Frame, Window, Panel, Dialog, Button, Label Swing

Swing:AWT기술을 기반으로 생긴 Javax라이브러리,, AWT보다 진화한 것, 패키지:javax.swing*스윙 컴포넌트=경량 컴포넌트:J+AWT컴포넌트, native(pper)에 의존하지 않는 ex)JButton, JCheckBox, JRadioButton, JSlider, JTextField, JpasswordField, JSpinner, JTextArea, JComboBox, JList타입 1)JComponent:상속 클래스 스윙 컴포넌트의 공통 속성을 실현하지 않고 AWTcontain클래스를 상속하다

Swing으로 만든 GUI 샘플

자바 GUI 패키지* GUI 패키지 계층 구조 – 모든 GUI 컴포넌트는 Component 클래스를 반드시 상속한다 – JApplet, JFrame, JDialog를 제외한 모든 스윙 컴포넌트는 JComponent를 상속한다AWT와 스윙 클래스의 상속 관계컨테이너컨테이너:다른 컴포넌트를 포함할 수 있는 GUI 컴포넌트, 그래서 컨테이너는 컴포넌트이면서 컨테이너인 ,ㄴ java.awt.Container를 상속받아야 합니다.컴포넌트:컨테이너와달리다른컴포넌트를포함할수없고컨테이너에포함되어있어야화면으로출력할수있는 GUI객체,, -모든 GUI컴포넌트의최상위클래스:java.awt.Component-스윙컴포넌트의최상위클래스:javax.sing.JComponent 최상위 컨테이너최상위 컨테이너 : 다른 컨테이너에 속하지 않아도 독립적으로 존재하며 화면에 출력 가능한 컨테이너 – JFrame-JDialog-JApplet컨테이너와 컴포넌트의 포함관계스윙 GUI 프로그램 작성*스윙으로 GUI프로그램을 만드는 과정 1. 스윙 프레임의 작성 2.main()메소드의 작성 3. 늑골에 스윙 컴포넌트를 붙인 스윙 프로그램을 작성하기 위한 수입문스윙패키지 이용>> javax.swing을 임포트 해야 한다.import java.awt.*; // 폰트, 그래픽 처리를 위한 클래스의 경로 이름 import java.awt.*; // AWT 이벤트를 사용하기 위한 경로 이름 import java.swing.*; / 스윙 컴포넌트 클래스의 경로 이름 import java.swing.event.*; // 스윙 이벤트를 위한 경로 이름스윙 프레임스윙 프레임:모든 스윙 컴포넌트를 포함한 최상위 GUI컨테이너>>JFrame1개의 스윙 애플리케이션에 1개의 프레임이 존재하고, 프레임이 감으면 프레임 내의 모든 컴포넌트도 사라진다>>화면에서 사라져스윙 프레임=JFrame 기본 구성프레임 생성 >> JFrame 클래스 상속프레임을 만드는 방법:JFrame을 상속받아 만들기퍼블릭 클래스의 MyFrame은 JFrame을 확장합니다.My Frame 개체가 생기면 스윙 프레임 역할을 합니다.MyFrame 클래스에 main() 메서드를 두고 메인에서 MyFrame 개체를 생성하면 스윙 프레임이 탄생합니다.MyFrame frame= new MyFrame(); // 스윙프레임을프레임의 크기와 제목은 작성자에서 설정setTitle(“스윙 프레임의 제목이야”);setSize(300,300);//폭 300, L높이 300사이즈의 프레임 설정, 이를 부르지 않으면 0*0이 출력된 화면에 보이지 않는 setVisible(true);//프레임이 출력되도록 지시함.. false를 사용하면 프레임이 숨다.코드로 쓴 set 어쩌나 메서드는 JFrame의 멤버인 main()의 기능과 위치스윙에 있어서 main()의 기능>>최소화 하는 것이 좋습니다.스윙 프로그램이 실행되는 시작점으로 프레임을 생성하는 코드 정도만 만드는 것, 나머지 기능은 프레임 클래스에 사용하는 것, main()의 위치 >> 1. My Frame 클래스에 둔다!! 권장!! 2. main() 메서드를 가진 새 클래스 만들기 프레임에 컴포넌트를 붙여넣기* 프레임 : 애플리케이션을 구성하는 베이스 프레임 *제목 : super() /setTitle()public MyFrame() {super(“제목 문자열”); // JFrame(“제목 문자열”) 생성자를 호출하여 제목짓기setTitle(“제목 문자열”); // 메서드를 호출하여 제목짓기* 메뉴붙이기 메뉴바 만들기 > 메뉴붙이기 > 메뉴에 여러 메뉴아이템 붙이기 나중에 잘 배울거야,,* 컨텐츠 팬에 컴포넌트 붙이기 : getContentPane()JFrame frame = new JFrame(); Container content Pane = frame.get Content Pane(); // 프레임의 콘텐츠 팬 찾기JFrame frame = new JFrame(); Container content Pane = frame.get Content Pane(); // 프레임의 콘텐츠 팬 찾기JButton button=new JButton(“Click”); // 버튼 컴포넌트 생성 contentPane.add(button); // 컨텐츠 팬에 버튼 부착… 컨텐츠 팬에 부착된 컴포넌트는 프레임이 출력되면 화면에 함께 출력되며* 콘텐츠 팬 변경 : setContentPane()JPanelp = new JPanel( ); 프레임.setContentPane(p);스윙 종료입니다시스템. exit (0)컨테이너와 배치컨테이너에 부착된 기능의 위치와 크기는 컨테이너 내부에 있는 배치 관리자에 의해서 결정된다.컨테이너마다 배치 관리자가 1개씩 있다.그러나 배치 관리자는 컨테이너에 컴포넌트가 부착한 시점에서 컴포넌트의 위치와 크기를 결정한다.배치 관리자의 종류(대표적인 타입 4개)배치관리자는 자바.awt 패들이 있는 클래스야..자바.awt 를 임포트 한다.*;1. FlowLayout컨테이너에 들어가는 순서대로 왼쪽에서 오른쪽에 컴포넌트를 배치, 오른쪽에 공간이 없는 경우는 아래로 이동합니다.2.BorderLayout컨테이너 공간을 동서 북 중앙>>의 5개로 나누어 애플리케이션으로 지정된 영역에 컴포넌트를 배치하고 애플리케이션에서는 5개 영역 중 1개를 지정할 필요가 있습니다. 하지 않는 경우는 중앙에 배치됩니다. 3. GridLayout컨테이너의 공간을 애플리케이션에서 설정한 같은 크기의 2차원 격자로 나누고, 컴포넌트가 삽입되는 순으로 왼쪽에서 오른쪽으로 배치됩니다컨테이너가 생겼을 때 자동으로 기본 배치 관리자가 생긴다[AWT] ウィンドウ、JWindow Border Layout Frame、JFrameBorderLAyoutDialog、JDialogBorderLayout パネル、JPanelFlowLayout アプレット、JAppletFlowLayout* 컨테이너에 새 배치 관리자 설정: Container.setLayout(LayoutManager Im)=Im을 Container의 새 배치 관리자로 설정 FlowLayout 배치 관리자* 배치 방법: 컨테이너 공간 내 왼쪽에서 오른쪽으로 배치- 컨테이너 크기가 바뀌면 재배치한다,, 프레임 크기를 바꾸면 배치도 바뀐다,, * 생성자와 속성생성자 종류 3개 임 new FlowLayout();//중앙 정렬, hGap=5, vGap=5명 배치 관리자 new FlowLayout(FlowLayout.LEFT);//왼쪽 정렬,, hGap=5, vGap=5명 배치 관리자 new FlowLAyout(FlowLayout.LEFT, 10,20);//왼쪽 정렬,, hGap=10, vGap=20명 배치 관리자hGap: 좌우 두 컴포넌트 간 수평 간격, 픽셀 단위: 기본 = 5vGap: 상하 두 컴포넌트 간 수직 간격, 픽셀 단위: 기본 = 5Board Layout 배치 관리자컨테이너 공간을 동서남북 중앙의 5개로 분할하고 배치 중 배치 방법:add(Component comp, int index)comp:컨테이너에 삽입되는 컴포넌트 index:컴포넌트의 위치 동:BorderLayout.EAST 니시:BorderLayout.WEST 남:BorderLayout. 서던 북:BorderLayout.NORTH 중앙:BorderLayout.CENTER컨테이너 크기가 바뀌면 재배치할 *생성자 및 속성생성자 >> 생성자에서 컴포넌트간의 간격을 조절할 수 있는 Border Layout(inth Gap, intv Gap); // hGap: 좌우간격 , 픽셀단위 , 디폴트는 0 // vGap: 상하간격, 픽셀단위 , 디폴트는 0그리드 Lsyout공간을 격자 형태로 분할하여 각 셀에 하나씩 컴포넌트를 배치하는 방법 부착 순서대로 컴포넌트를 셀에 배치합니다 * 배치 방법 – 격자 구성은 생성자로부터 행수와 열수로 지정 – 셀의 왼쪽 > 오른쪽 > 아래 > 생성자와 속성GridLayout();GridLayout(introws, int cols);GridLayout(int rows, int cols, int hGap, int vGap)//rows:격자의 행수, 디폴트=1//cols:격자의 렬수, 디폴트=1//hGap:좌우 간격, 픽셀 단위, 디폴트=0//vGap:상하 간격, 픽셀 단위, 디폴트=0//rows x cols만 셀을 가진 배치 공간을 갖는다배치 관리자가 없는 컨테이너배치 관리자가 없는 컨테이너 : 애플리케이션에서 컴포넌트의 절대 크기와 절대 위치를 스스로 결정 * 용도 1) 컴포넌트의 크기나 위치를 개발자가 임의로 결정하는 경우 2) 게임과 같이 입력에 따라 컴포넌트의 위치/크기가 수시로 바뀌는 경우 3) 여러 컴포넌트를 중첩하고 싶은 경우 * 컨테이너 배치 관리자 제거 방법 : Container.set Layout(null);// JPanel 에 배치관리자를 삭제하는 예 JPanel p = new JPanel (); p.set Kayout (null);* 컴포넌트의 크기와 위치설정 >>프로그램 내에서 이루어져야 한다>컴포넌트가 중첩되는 효과를 연출할 수 있다.컴포넌트 사이즈 설정 Component.set Size(intwidth, in theight); 컴포넌트 위치설정 Component.set Location(intx, inty); 컴포넌트 위치와 크기 동시에 설정 Component.set Bounds(intx, inty, intwidth, intheight);컴포넌트 사이즈 설정 Component.set Size(intwidth, in theight); 컴포넌트 위치설정 Component.set Location(intx, inty); 컴포넌트 위치와 크기 동시에 설정 Component.set Bounds(intx, inty, intwidth, intheight);컴포넌트 사이즈 설정 Component.set Size(intwidth, in theight); 컴포넌트 위치설정 Component.set Location(intx, inty); 컴포넌트 위치와 크기 동시에 설정 Component.set Bounds(intx, inty, intwidth, intheight);

error: Content is protected !!