배치 관리자(Layout Manager)

 

컨테이너 안에 추가되는 컴포넌트의 위치와 크기를 자동적으로 결정한다.




 FlowLayout


컴포넌트들을 왼쪽에서 오른쪽으로 배치한다. JPanelApplet(awt.애플릿)의 디폴트 배치 관리자이다.


- 너비를 벗어날 경우 다음 줄에서 다시 배치를 시작한다.

 


생성자 

설명 

 FlowLayout()

 새로운 FlowLayout객체를 생성하는 디폴트 생성자이다기본 설정은 

 중앙(center)배치이며간격은 세로가로 각각 5픽셀이다.

 FlowLayout(int align)

 매개변수로 정수로 받는데이는 정렬 방식을 의미한다정렬 매개변수로

 FlowLayout.LEADING, FlowLayout.CENTER, FlowLayout.TRAILING 

 이 있다.

 FlowLayout(int align, int hgap, int vgap)

 매개변수로 정렬 방식과 수평 간격(hgap)과 수직 간격(vgap)을 받으며

 이를 토대로 새로운 FlowLayout 객체를 생성한다.




 BorderLayout


- 컴포넌트들이 상(North), (South), (East), (West) 그리고 중간(Center)에 배치된다.


- JFrameJApplet(swing.애플릿), 대화 상자와 같은 최상위 컨테이너의 디폴트 배치 관리자이다.


- 컴포넌트의 영역을 지정하지 않을 경우 자동으로 중간 영역에 배치된다.


- 같은 위치에 컴포넌트들이 추가되면 뒤 컴포넌트에 가려서 앞의 컴포넌트가 보이지 않는다.


- 배치된 컴포넌트는 항상 컨테이너 내부를 채우게 되며, setLocation, setSize 함수로 크기나 위치조절이 되지 않는다. (확인 결과 West, East의 경우 너비 조절은 가능하나 높이 조절은 안됩니다.)

 


생성자 

설명 

 BorderLayout()

 새로운 BorderLayout객체를 생성하는 디폴트 생성자이다.

 BorderLayout(int hgap, int vgap)

 매개변수로 수평 간격수직 간격을 받아 이들을 가지는 새로운 

 BorderLayout 객체를 생성한다.


메소드 

설명 

 void setHgap(int hgap)

 컴포넌트 사이의 수평 간격을 설정한다. (픽셀 단위)

 void setVgap(int vgap)

 컴포넌트 사이의 수직 간격을 설정한다. (픽셀 단위)




 GridLayout


- 컴포넌트를 격자 모습으로 배치한다. 행과 열로 관리된다.


- 모든 컴포넌트들의 크기는 같게 되며 컨테이너의 모든 공간은 컴포넌트로 채워진다. 따라서 윈도우의 크기를 바꾸면 GridLayout은 컴포넌트의 크기를 변경하여 윈도우의 크기에 맞춘다.



생성자 

설명 

GridLayout(int rows, int cols)

 row행과 cols열을 가지는 GridLayout객체를 생성한다만약 rows와 

 cols가 0이면 필요한 만큼의 행이나 열이 만들어진다.

 GridLayout(int rows, int cols, int hgap, int vgap)

 매개변수로 수평 및 수직 간격을 추가로 받아서 초기화한 뒤, rows행 cols

 을 가진 GridLayout객체를 생성한다.




 BoxLayout


컴포넌트를 하나의 행이나 열에 배치하며, Box를 쌓는 모양으로 정렬된다. 컴포넌트를 정렬할 수도 있다.

 


생성자 

설명 

BoxLayout(Container container, int align)

 매개변수로 배치 관리자를 설정할 컨테이너와정렬 방식을 받는다.  BoxLayout의 정렬 방식은 BoxLayout.X-AXIS(x축 정렬), BoxLayout.Y-AXIS(y축 정렬)로 두 가지가 있다.




▶ CardLayout


- 여러 장의 카드처럼 컨테이너를 배치하여 각각의 컨테이너 위에 컴포넌트(JComponent)를 배치한다.


- 즉, 순서가 변경되면, 해당 순서의 컨테이너가 나타나고, 그 외의 것은 감추어진다. 카드가 번갈아가며 나타나는 형태이다.

 

[버튼을 클릭하면 카드가 변경된다.]


생성자 

설명 

CardLayout()

 새로운 CardLayout객체를 생성하는 디폴트 생성자이다.

CardLayout(int hgap, int vgap)

 hgap과 vgap은 컴포넌트 사이의 수평 간격과 수직 간격을 픽셀로 표시한  다기본값은 0이다.


메소드

설명 

void first(Container parent)

 첫 번째 순서의 컨테이너를 보여준다.

void next(Container parent)

 다음 순서를 보여주며현재 순서가 마지막이면 처음 순서를 보여준다.


void previous(Container parent)

 이전 순서를 보여주며, 현재 순서가 처음이면 마지막 순서를 보여준다.

void last(Container parent)

 마지막 순서의 컨테이너를 보여준다.

void show(Container parent, String s)

 문자열 s로 지정한 컨테이너를 보여준다. 각 컨테이너별로 이름을 지어줄 

 수 있다.




▶ Example


- 컨테이너 클래스에 배치 관리자를 설정하려면 먼저 new 연산자를 이용하여 배치 관리자 객체를 만들고 컨테이너 클래스의 setLayout() 메소드를 사용하여 해당 객체를 배치 관리자로 설정한다.


JFrame frame = new JFrame(“My Frame”);

frame.setLayout(new BorderLayout());


또는


JFrame frame = new JFrame(“My Frame”);

BorderLayout bl = new BorderLayout();

frame.setLayout(bl);

 

컴포넌트의 크기에 대한 힌트를 배치 관리자에게 주는 방법으로 아래의 메소드들이 있다.

  • setMinimumSize(Dimension minimumsize)

  • setMaximumSize(Dimension maximumsize)

  • setPreferredSize(Dimension preferredsize) - setSize()와 유사하지만 레이아웃에 따라 setSize()로 지정할 경우 나타나지 않을 수 있으므로 레이아웃을 지정할 경우 setPreferredSize()를 사용하는 것이 좋다. 

 

컴포넌트의 정렬에 대한 힌트

  • setAlignmentX()

  • setAlignmentY()

 

배치 방향을 설정하기 위한 메소드 (Orientation방향, 지향이란 뜻을 가진다.)

  • setComponentOrientation()

  • applyComponentOrientation()

 

 

 

절대 위치로 배치하기


...


JButton button = new JButton("Button");

setLayout(null); // 배치 관리자를 null로 설정할 경우

button.setBounds(int x, int y, int width, int height); // 컴포넌트의 위치크기를 꼭 설정해야함.

add(Button("Button")) // 컴포넌트를 추가한다.


...

  

- setBounds() 메소드 대신에아래의 두 메소드를 호출해도 된다. Layout을 설정하지 않았기 때문이다.

  • setSize(int width, int height)

  • setLocation(int x, int y)








▶ Graphical User Interface (GUI) - 그래픽 사용자 인터페이스


- GUI 는 사용자와 상호작용하는 프로그램을 쉽게 작성할 수 있다.


현재 자바에서 사용되어지는 GUI 객체는 Abatract Windows Toolkit(AWT) 와 스윙(Swing)으로 두 가지가 있다.

  

- AWT -> java.awt.*;

1. 운영 체제가 제공하는 자원을 이용하여 컴포넌트를 생성한다

2. 다양한 플랫폼에서 쉽게 컴포넌트를 제공할 수 있다.

3. 컴포넌트가 플랫폼에 종속되므로 실행되는 플랫폼에 따라서 컴포넌트의 모습이 달라진다.

, 일관된 화면을 제공하는 것이 어렵다.

 

플랫폼은 소프트웨어 응용 프로그램들을 돌리는 데 쓰이는 하드웨어와 소프트웨어의 결합이다. 플랫폼은 하나의 운영 체제 또는 컴퓨터 아키텍처라고 단순히 말할 수 있으며 그 두 가지를 통칭해서 말할 수도 있다일반적으로 플랫폼은 컴퓨터의 아키텍처, 운영 체제(OS), 프로그램 언어, 그리고 관련 런타임 라이브러리 또는 GUI를 포함한다. - [출처] 위키백과

 

- Swing -> javax.swing.*; / javax.swing.event*;

1. 컴포넌트가 자바로 작성되어 있기 때문에 플랫폼에 상관없이 일관된 화면을 보여준다.

2. 스윙은 AWT에서 없는 다양한 컴포넌트들을 제공한다. (현재는 스윙의 사용이 권장되고 있다.)

3. 스윙은 AWT를 대체하기 위하여 AWT의 컴포넌트 이름 앞에 J를 붙인 JButton, JLabel 등으로 나타내고, 동일한 기능을 제공한다.

4. 다양한 룩앤필(Look and feel)을 선택할 수 있다. 룩앤필이란 각 운영 체제가 제공하는 GUI의 모습을 뜻한다. 룩앤필에 따라서 외관이 조금씩 달라진다.




▶ Swing의 기본 구조

 


1. Component(컴포넌트) : 레이블, 버튼, 텍스트 필드와 같은 GUI를 작성하는 기본 빌딩 블록을 의미한다. 윈도우 시스템(ex- javaFX)에서는 컨트롤(control)이라고 한다. 컴포넌트 클래스는 화면에 표시되어서 사용자와 상호 작용하는 시각적인 객체를 나타낸다. 이 클래스는 모든 스윙 클래스들이 가지고 있는 공통적인 기본 메소드를 정의한다.

 

- 기본 컴포넌트 : JButton, JLabel, JCheckBox, JList, JMenu, JTextField, JTextArea

- 컨테이너 컴포넌트 : JFrame, JDialog, JApplet, JPanel, JScrollPane

 

2. Container(컨테이너) : 다른 컴포넌트들을 내부에 놓을 수 있는 컴포넌트


- 최상위 컨테이너 : 다른 컨테이너 안에 포함될 수 없는 컨테이너

ex) JFrame, JDialog, JApplet

* JFrame : 윈도우와 메뉴를 가지는 일반적인 데스크탑 애플리케이션에 적합하다.

* JDialog : 메뉴가 없는 대화 상자 형식의 간단한 애플리케이션에 사용된다.

* JApplet : 애플릿을 작성하는데 사용된다.

 

- 일반 컨테이너 : 다른 컨테이너 안에 포함될 수 있는 컨테이너

ex) JPanel, JScrollPane




▶ 프레임(Frame)


컴포넌트를 추가할 수 있는 윈도우


생성자

설명 

 JFrame()

 타이틀이 없는 새로운 프레임을 생성

 JFrame(String title)

 매개변수로 받은 문자열을 타이틀로 하여 새로운 프레임을 생성


- JFrame은 "pane"이라는 것들로 분리되어지는데, 이들은 서로가 최상위에 위치해있다. Pane의 종류로는 Root Pane, Layered Pane, Content Pane, Glass Pane이 있고, 각 Pane은 다른 기능을 수행한다. 주로 컴포넌트가 추가되는 pane은 ContentPane이고 여기서는 ContentPane에 대해서만 다룬다.



- Content Pane에는 직접적으로 접근할 수 있는데, 그 방법으로 JPanel을 이용하는 것이다. 프레임의 ContentPane에 생성한 JPanel을 추가할 경우 보다 쉽게 프레임 속의 모든 것들을 다루게 된다.


프레임의 속성 변경 : 프레임도 객체이므로 속성을 변경하려면 set으로 시작하는 설정자 메소드를 사용하여야 한다

(반환형은 모두 void 이다.)


 설정자 메소드

 설명

setLocation(int x, int y)

(컴포넌트도 사용가능)

 모니터에서 프레임(or 컴포넌트)의 위치 설정

setSize(int width, int height)

(컴포넌트도 사용가능)

 프레임(or 컴포넌트)의 크기 설정

setBounds(int x, int y, int w, int h)

(컴포넌트도 사용가능)

 프레임(or 컴포넌트)의 위치와 크기 설정

 setIconImage(ImageIcon icon)

 윈도우 시스템에 타이틀 바태스크 스위처에 표시할 아이콘을 설정

setTitle(String title) 

 타이틀 바의 제목을 설정한다.

setResizable(boolean resizable) 

 사용자가 프레임의 크기를 조절할 수 있는 지 설정한다.

 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

 사용자가 프로그램 닫기를 눌렀을 때 프로그램이 완전히 종료되는

 지의 여부를 설정하며, 기본값은 닫기를 눌러도 프로그램이 종료되

 지 않도록  되어 있다.

setLayout(LayoutManager manager)

(패널도 사용가능)

 레이아웃을 설정하는 메소드로 매개변수는 컴포넌트들을 배치하

 는 배치관리자이다. 디폴트 값은 BorderLayout 이고, 컴포넌트

 위치를 변경하고 싶다면 LayoutManager null로 설정해야 한다.

setVisible(boolean visible)

(컴포넌트도 사용가능)

 프레임(or 컴포넌트)이 눈에 보이게 하는지 설정하는 메소드이다. 

 기본값이 false 이므 true로 설정해야 프레임을 볼 수 있다

 설정안하면 안보인다.

setLocationRelativeTo(Component component) 

 매개변수로 지정받은 컴포넌트 위치에 따라 상대적으로 프레임의

 위치가 결정된다. 그러나 매개변수로 null을 전달할 경우 모니터 

 화면의 중앙을 기준으로 프레임이 배치된다.

 setMenuBar(JMenuBar menubar)

 현재 프레임에 메뉴바를 붙인다.

 setContentPane(JPanel panel)

 컨테이너에 패널을 추가




▶ 패널(Panel)


- 컴포넌트들을 포함하고 있도록 설계된 컨테이너이다. 패널에 컴포넌트들을 추가하고 해당 패널을 프레임에 추가하는 것이 일반적으로 컴포넌트들을 화면에 표시하는 방법이다. 패널을 프레임에 추가하지 않고 프레임에 컴포넌트들을 직접 추가하는 것도 가능하다. 그러나 별도의 패널을 쓰는 것이 유지 보수 및 배치 관리에 좋은 경우가 많다. 쉽게 말해 패널은 스윙의 "위젯"을 성립시키기 위해 이용되어진다.

 

 생성자

 설명

 JPanel()

 새로운 패널 생성

 JPanel(boolean isDoubleBuffered)

 매개변수가 참일 경우 더블 버퍼링을 사용

 JPanel(LayoutManager layouy)

 매개변수로 지정된 배치 관리자를 사용하는 패널 형성


 메소드

 설명

void setLayout(LayoutManager layout)

 설명은 위와 같고, 디폴트는 FlowLayout 이다.

 void setToolTipText(String text)

 사용자가 마우스를 패널(or 컴포넌트)의 빈 곳에 올려놓으면 툴팁을 표시한다.




▶ 그 외 프레임 또는 패널에서 자주 쓰이는 메소드


 메소드

 설명

 void add(Component c)

 지정된 컴포넌트를 추가한다.

void remove(Component c)

 지정된 컴포넌트를 제거한다.

void pack()

 프레임 크기를 추가된 컴포넌트들의 크기에 맞도록 조절한다.




 레이블(Label) 


편집이 불가능한 텍스트를 표시하기 위한 컴포넌트


JLabel

 생성자

 JLabel()

 비어있는 새로운 레이블을 생성한다.

 JLabel(String text)

 매개변수로 받은 텍스트를 표시하는 레이블을 생성한다.

 JLabel(Icon icon)

 매개변수로 받은 아이콘을 표시하는 레이블을 생성한다. 

 주로 ImageIcon을 사용하여 레이블의 이미지를 생성한다.

 메소드

 void setText(String text)

 레이블의 텍스트를 설정한다.

 String getText()

 레이블의 텍스트를 반환한다.

void setIcon(Icon icon)

 레이블의 아이콘을 설정한다. 

  Icon getIcon()

 레이블의 아이콘을 반환한다. 




 버튼(Button)


- 사용자가 클릭했을 때, 이벤트를 발생하여 원하는 행위를 하게 하는 데 이용된다.

 

JButton

 생성자

 JButton()

 레이블이 없는 버튼을 생성한다.

JButton(String label)

 매개변수로 받은 텍스트가 표시되는 버튼을 생성한다.

 JButton(Icon icon)

 매개변수로 받은 아이콘이 표시되는 버튼을 생성한다. 

 주로 ImageIcon을 사용하여 버튼 이미지를 생성한다.

 메소드

 void setText(String text)

 버튼의 텍스트를 설정한다.

 String getText()

 버튼의 텍스트를 반환한다.

void setIcon(Icon icon)

 버튼의 아이콘을 설정한다. 

  Icon getIcon()

 버튼의 아이콘을 반환한다. 

 void doClick()

 사용자가 버튼을 누른 것처럼 이벤트를 발생한다.

void setBorderPainted(boolean value)

 버튼의 경계를 나타내거나 감춘다.

void setContentAreaFilled(boolean value)

 버튼의 배경을 채울 것인지를 설정한다.

 void setEnabled(boolean value)

 버튼을 활성화하거나 비활성화한다.

 void setRollOverEnabled(boolean value)

 마우스가 버튼 위에 있으면 경계를 진하게 하는 롤오버 효과를 

 설정한다.




 텍스트 필드(TextField) 


- 입력이 가능한 한줄의 텍스트 필드를 만드는데 사용된다.

 

JTextField

 생성자

JTextField()

 비어있는 새로운 텍스트 필드를 생성한다.

 JTextField(int num)

 매개변수로 지정된 글자 수를 가지고 있는 텍스트 필드를 생성한다.

 JTextField(String text)

 지정된 문자열로 초기화된 텍스트 필드 생성

 메소드

 void setText(String text)

 텍스트 필드의 문자열을 설정한다.

 String getText()

 텍스트 필드에 입력된 문자열을 반환한다.

void setEditable(boolean value)

 사용자가 텍스트 필드를 수정할지의 여부를 설정한다.

  boolean isEditable()

 사용자가 텍스트 필드를 수정할 수 있으면 true, 없으면 false를 반환한다.





+ Recent posts