JAVA GUI PROGRAMMING

52
JAVA GUI PROGRAMMING JAVA GUI PROGRAMMING

description

JAVA GUI PROGRAMMING. 12. JAVA GUI. 12.1 GUI 의 기본 요소 추상 윈도우 툴 킷 (AWT, Abstract Window Toolkit) 을 사용 . AWT 를 사용하기 위해서 다음 두 문장을 포함해야 함 . import java.awt.*; import java.awt.event.*;. 12. JAVA GUI. 12.2 자바의  GUI  컴포넌트. 12. JAVA GUI. 12.2 자바의  GUI  컴포넌트 12.2.1  버튼 - PowerPoint PPT Presentation

Transcript of JAVA GUI PROGRAMMING

JAVA GUI PROGRAMMINGJAVA GUI PROGRAMMING

12. JAVA GUI12. JAVA GUI

12.1 GUI의 기본 요소    추상 윈도우 툴 킷 (AWT, Abstract Window Toolkit)을 

      사용 .

AWT를 사용하기 위해서 다음 두 문장을 포함해야 함 .

import java.awt.*;

import java.awt.event.*;

12. JAVA GUI12. JAVA GUI

12.2 자바의  GUI 컴포넌트 

12. JAVA GUI12. JAVA GUI

12.2 자바의  GUI 컴포넌트  12.2.1 버튼 

- 사용자가 클릭할 수 있는 기본 컴포넌트 - 버튼 클릭시에  ActionEvent 발생   생성자 ① public Button() 레이블이 없는 버튼을 생성한다 . ② public Button(String label) label을 레이블로                   갖는 버튼을 생성한다 .   지원되는 메소드  ① public String getLabel() 버튼의 이름인 레이블을                   반환한다 . ② public void setLabel(String label) 버튼의 이름인                   레이블을 설정한다 .

12. JAVA GUI12. JAVA GUI[예제 코드 ] import java.awt.*; import java.awt.event.*; // ActionListener를 구현하기 위해 필요 . import java.applet.Applet; public class ButtonApplet extends Applet implements ActionListener { Button button1,button2; String msg = ""; public void init() { button1 = new Button("First"); button1.addActionListener(this); // 버튼  1을 리스너에 등록 . button1.setActionCommand("One"); // 액션명령어 “ One” 설정  button2 = new Button("Second"); button2.addActionListener(this); // 버튼  2를 리스너에 등록 . button2.setActionCommand("Two"); add(button1); add(button2); } // 버튼  1과  2를 애플릿에 포함 .

12. JAVA GUI12. JAVA GUI[예제 코드 ] public void actionPerformed (ActionEvent e) { String cmd = e.getActionCommand(); // 버튼에 연결된 액션 명령 문자열을 변수  cmd에 저장한다 . if(cmd.equals("One")) { msg = "One"; } else if(cmd.equals("Two")) { msg = "Two"; } repaint(); // applet을 다시 디스플레이 한다 . } public void paint(Graphics g) { g.drawString(msg, 10, 70); }

12.2.2 텍스트 필드 (TextField) - 문자열을 입력받거나 , 실행 결과를 출력할 때 사용  - 텍스트 필드에서 엔터키를 키면  ActionEvent가 발생 

  생성자 ① public TextField()        새로운 텍스트 필드를 생성한다 . ② public TextField(int cols)        주어진 컬럼수를 가진 텍스트 필드를 생성한다 . ③ public TextField(String Text)        주어진 텍스트로 초기화된 텍스트 필드를 생성한다 . ④ public TextField(int cols, String Text)        기술된  Text와 크기  cols로 초기화된 텍스트 필드를        생성한다 .

12. JAVA GUI12. JAVA GUI

12.2.2 텍스트 필드 (TextField)   지원되는 메소드 

① public boolean echoCharsSet()               에코 문자 셋을 가진 경우  true를 , 그렇지 않은 경우 

false를 반환한다 . ② public int getColums()                해당 텍스트 필드의 객체가 가진 컬럼 수를 반환한다 .

③ public char getEchoChar()                에코로 사용되는 문자를 반환한다 . ④ protected String paramString()                해당 텍스트 필드의 문자열을 반환한다 . ⑤ public void setEchoCharacter(Char c);                해당 텍스트 필드의 에코문자를 설정한다 .

12. JAVA GUI12. JAVA GUI

[예제 코드 ] import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class TextFieldApplet extends Applet implements ActionListener { TextField tf1,tf2; public void init() { tf1 = new TextField("Key in your message", 16); tf1.addActionListener(this); // 텍스트필드  tf1의 이벤트를 등록  tf2 = new TextField("Hello !!", 16); tf2.addActionListener(this); // 텍스트필드  tf2의 이벤트를 등록  add(tf1); // applet에 텍스트필드  tf1, tf2를 포함시킴 .

add(tf2); }

12. JAVA GUI12. JAVA GUI

[예제 코드 ] public void actionPerformed(ActionEvent e) { if(e.getSource() instanceof TextField) { TextField t = (TextField) e.getSource(); if(t == tf1) { // 이벤트가 발생한 텍스트 필드를 확인함  tf2.setText(t.getText()); tf1.setText(""); // tf1에 있었던 모든 문자를 삭제함 

} else if(t == tf2) { tf1.setText(t.getText()); tf2.setText(""); }}}}

12. JAVA GUI12. JAVA GUI

12.2.3 체크박스와 라디오 버튼    생성자  ① public Checkbox()       레이블이 없고 , 초기값이  false인 체크박스를 생성한다 .

② public Checkbox(String label)        레이블이 문자열  label인 체크박스를 생성한다 . ③ public Checkbox(String label, CheckboxGroup group, boolean state)       레이블이  label이고 초기상태가  state이며 그룹이 

group인       라디오 버튼을 생성한다 .

12. JAVA GUI12. JAVA GUI

12.2.3 체크박스와 라디오 버튼  메소드 

① public void addNotify() 체크박스의 모양을                변경할 수 있도록 피어 (peer)를 설정한다 . ② public String getLabel()                 체크박스의 레이블 문자열을 반환한다 . ③ public boolean getState() 체크박스의 상태를 반환한다 . ④ public void setLabel() 체크박스의 레이블을 설정한다 . ⑤ public void setState() 체크박스의 상태를 설정한다 . ⑥ public Checkbox getCurrent()                현재 선택한 체크박스를 반환한다 . ⑦ public String toString()                 체크박스 그룹을 나타내는 문자열을 반환한다 .

12. JAVA GUI12. JAVA GUI

[체크 박스 예제 코드 ] import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class CheckboxApplet extends Applet implements ItemListener { Checkbox ch1, ch2, ch3; TextField tf; String msg="Checkbox "; public void init() { ch1 = new Checkbox("one"); // 체크박스  3개 생성  ch2 = new Checkbox("two"); ch3 = new Checkbox("three"); ch1.addItemListener(this); // 체크박스의 이벤트를 등록한다 . ch2.addItemListener(this); ch3.addItemListener(this); tf = new TextField(20);

12. JAVA GUI12. JAVA GUI

[체크 박스 예제 코드 ] add(ch1); add(ch2); add(ch3); add(tf); } public void itemStateChanged(ItemEvent e) { if(e.getItem().equals("one")) {msg = msg + "1";} else if(e.getItem().equals("two")) {msg = msg + "2";} else {msg = msg + "3";} if(e.getStateChange()==ItemEvent.SELECTED) { msg = msg + " is selected"; } else { msg = msg + " is de-selected"; } tf.setText(msg); msg = "Checkbox "; } }

12. JAVA GUI12. JAVA GUI

[라디오 버튼 예제 코드 ] import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class RadioButton extends Applet implements ItemListener { CheckboxGroup radio1; Checkbox ch1, ch2, ch3; TextField tf; String msg="Checkbox "; public void init() { radio1 = new CheckboxGroup(); // ch1, ch2, ch3는 동일한 그룹으로 하나만이 선택 가능하다 .

ch1 = new Checkbox("one", radio1, true); ch2 = new Checkbox("two", radio1, false); ch3 = new Checkbox("three", radio1, false); // ch1, ch2, ch3의 이벤트를 등록한다 . ch1.addItemListener(this);

12. JAVA GUI12. JAVA GUI

[라디오 버튼 예제 코드 ] ch2.addItemListener(this); ch3.addItemListener(this); tf = new TextField(20); add(ch1); add(ch2); add(ch3); add(tf); } public void itemStateChanged(ItemEvent e) { if(e.getItem().equals("one")) { msg = msg + "1";} else if(e.getItem().equals("two")) { msg = msg + "2";} else {msg = msg + "3";} if(e.getStateChange()==ItemEvent.SELECTED) { msg = msg + " is selected"; } tf.setText(msg); msg = "Checkbox "; }

12. JAVA GUI12. JAVA GUI

12.2.4 레이블   생성자 

① Label()              출력할 문자열이 없는 레이블을 생성한다 . ② Label(String text)              문자열  text를 출력하는 레이블을 생성한다 . ③ Label(String text, int alignment).              문자열을 정렬할 위치를 결정할 수 있는 생성자이다 .

alignment: Label.RIGHT, Label.CENTER, Label.LEFT

12. JAVA GUI12. JAVA GUI

[레이블 예제 코드 ] import java.awt.*; import java.applet.Applet; public class LabelDemo extends Applet { Label l1, l2, l3; public void init () { l1 = new Label("Label_Left", Label.LEFT); l2 = new Label("Label_Center", Label.CENTER); l3 = new Label("Label_Right", Label.RIGHT); add(l1); add(l2); add(l3); } }

12. JAVA GUI12. JAVA GUI

12. JAVA GUI12. JAVA GUI 12.2.5 스크롤 바 (scroll bar)

생성자  ① public Scrollbar() 스크롤 바를 만든다 . ② public Scrollbar(int orientation)              지정된 방향의 스크롤 바를 만든다 . orientation의 값은  HORIZONTAL 또는 VERTICAL이다 . ③ public Scrollbar(int orientation, int value, int visible, int minimum, int maximum)              - int value:스크롤 바의 초기값을 나타낸다 .              - int visible:화면에 표시되는 스크롤 바의 크기를 

                                      나타낸다 .              - int minimum:스크롤 바의 최소값을 나타낸다 .              - int maximum:스크롤 바의 최대값을 나타낸다 .

12. JAVA GUI12. JAVA GUI 12.2.5 스크롤 바 (scroll bar)

메소드  ① public int getLineIncrement()               현재 화면에 나타나지 않은 한 라인이 위로 스크롤 된다 .

② public int getValue()               스크롤 바의 현재 값을 반환한다 . ③ public void setValue(int value)               스크롤 바의 값을 지정된 값으로 설정한다 . ④ public int getOrientation()               스크롤 바의 방향을 반환한다 . ⑤ public void setValues(int value, int visible, int minimum, int maximum)               스크롤 바에 대한 여러 가지 값을 설정한다 .

12. JAVA GUI12. JAVA GUI[스크롤바 예제 코드 ] import java.awt.*; import java.awt.event.*; import java.applet.Applet; Public class ScrollBarDemo extends Applet implements AdjustmentListener { TextField tf1, tf2; Scrollbar hs, vs; public void init() { tf1 = new TextField(30); tf2 = new TextField(30); add(tf1); add(tf2); vs = new Scrollbar(Scrollbar.HORIZONTAL,100, 100, 0, 20

0); vs.addAdjustmentListener(this);

12. JAVA GUI12. JAVA GUI [스크롤바 예제 코드 ] hs = new Scrollbar(Scrollbar.VERTICAL, 100, 100, 0, 200); hs.addAdjustmentListener(this); add(vs); add(hs); }

public void adjustmentValueChanged(AdjustmentEvent e) { // 스크롤 바에서 이벤트가 발생하면 이 메소드가 호출된다 .

Scrollbar s = (Scrollbar) e.getSource(); if(s.getOrientation()==Scrollbar.HORIZONTAL) { tf1.setText(String.valueOf(s.getValue())); } else { tf2.setText(String.valueOf(s.getValue())); } }}

12. JAVA GUI12. JAVA GUI 12.2.6 텍스트 영역    

생성자  ① public TextArea()                기본 크기를 가지는  TextArea를 생성한다 . ② public TextArea(int rows, int columns)                원하는 줄과 열을 가진  TextArea를 생성한다 . ③ public TextArea(String s)               원하는 문자열을 포함하는  TextArea를 생성한다 . ④ public TextArea(String s, int rows, int columns)               원하는 문자열과 크기를 가진  TextArea를 생성한다 . ⑤ public TextArea(String s, int row, int colum, int scrollbar)                변수  scrollbar는  SCROLLBARS_BOTH, SCROLLBARS_HOR

IZONT AL_ ONLY, SCROLLBARS_NON, SCROLLBARS_VERTICAL_ ONLY 중의 하나 

12. JAVA GUI12. JAVA GUI 12.2.6 텍스트 영역    

메소드 ① public void insertText(String str, int pos)               원하는 위치  pos에 문자열을 삽입하는 메소드이다 . ② public void appendText(String str)               텍스트 영역의 끝에 문자열을 추가하는 메소드이다 . ③ public void replaceText(String str, int start, int end)               원하는 위치의 문자열을 문자열  str로 변경하는 메소드이다 .

④ public int getRows()              텍스트 영역의  row(행 )의 수를 반환한다 . ⑤ public int getColumns()              텍스트 영역의  column(열 )의 수를 반환한다 .

12. JAVA GUI12. JAVA GUI[예제 코드 ] import java.applet.Applet; import java.awt.*; import java.awt.event.*; class TextAreaDemo extends Applet implements TextListener { TextArea ts, td; public void init() { ts= new TextArea("key in sentence", 5, 20); ts.addTextListener(this); add(ts); td = new TextArea(5, 20); td.setEditable(false); add(td); }

12. JAVA GUI12. JAVA GUI[예제 코드 ] public void textValueChanged(TextEvent e) { TextComponent source = (TextComponent) e.getSource(); td.setText(source.getText()); } }

12. JAVA GUI12. JAVA GUI 12.2.7 Choice(선택 ) 버튼      생성자 ① public Choice()   메소드 ① public int countItems() Choice 객체에서 선택 가능한 항목의 수를 반환한다 . ② public String getItem(int index) index가 가리키는 항목을 반환한다 (맨 앞의 항목의  index는  0이다 ).

③ public synchronized void addItem(String item) Choice 객체에 선택 가능한 항목 (item)을 추가한다 . ④ public String getSelectedItem() 현재 선택된 항목을 반환한다 . ⑤ public int getSelectedIndex() 현재  선택된  항목의   index 를  반환한다 .

⑥ public synchronized void select(int pos)       인자  pos가 가리키는 항목을 선택하는 메소드이다 . ⑦ public synchronized void select(String str)       문자열  str과 동일한 항목을 선택하는 메소드이다 .

12. JAVA GUI12. JAVA GUI[예제 코드 ] import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class ChoiceDemo extends Applet implements ItemListener { Choice c1; public void init() { c1 = new Choice(); c1.addItem("Computer Engineering"); c1.addItem("Multimedia"); c1.addItem("Computer Communication"); c1.addItem("Data Base Design"); c1.select(2); // 초기값을  Comput Communication 으로 선택 

c1.addItemListener(this); // Choice 객체의 이벤트 등록  add("Major", c1); }

12. JAVA GUI12. JAVA GUI[예제 코드 ] public void itemStateChanged(ItemEvent e) { Choice tmp = (Choice) e.getItemSelectable(); showStatus(tmp.getSelectedItem()+" selected"); // 상태바의 메시지 출력   } }

12. JAVA GUI12. JAVA GUI 12.2.8 List 생성자 ① public List()        기본값을 가진  List를 생성  ② public List(int rows, boolean multipleSelections) 생성될   List 객체의  라인수

       및 여러 항목을 선택 가능하게 할 것인지를 설정    메소드 ① public int countItems() 리스트 안에 있는 항목의 수를 반환한다 . ② public String getItem(int index) index가 가리키는 항목을 반환한다 . ③ public synchronized void addItem(String item)        리스트 객체의 맨 끝에 항목을 추가한다 . ④ public synchronized void replaceItem(String newValue, int index) index가 가리키는 항목을  newValue로 교체한다 . index는 정수로서 , 변경을 원하는 항목의 첨자이다 . index 의 값이  -1 의 값을 가지거나 리스트안의

       항목의 번호보다 큰 경우 리스트의 맨 끝에 항목이 추가된다 . ⑤ public synchronized void clear() 리스트 객체의 모든 항목을 삭제한다 . ⑥ public synchronized void delItem(int position)        리스트 객체에서  position이 가리키는 항목을 삭제한다 .

12. JAVA GUI12. JAVA GUI[예제 코드 ] import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class ListDemo extends Applet implements ActionListener { private List fromList, toList; private Button copyButton; private String majorNames[] = { "game", "multimedia", "SE", "Com. Arch.", "internet", "web search", "graphics", "AI", "neural net", "data base", "edutainment", "OS" }; public void init() { // create a list with 5 items visible, allow multiple selections fromList = new List( 5, true ); // add items to the list for ( int i = 0; i < majorNames.length; i++ ) fromList.add( majorNames[ i ] );

12. JAVA GUI12. JAVA GUI[예제 코드 ] add( fromList ); // create copy button copyButton = new Button( "Copy ->" ); copyButton.addActionListener( this ); add( copyButton ); // create a list with 5 items visible // do not allow multiple selections toList = new List( 5, false ); add( toList ); } public void actionPerformed( ActionEvent e ) { String colors[]; // get the selected states colors = fromList.getSelectedItems(); // clear all items in the right list toList.clear(); // copy them to copyList for ( int i = 0; i < colors.length; i++ ) toList.add( colors[ i ] ); }}

12. JAVA GUI12. JAVA GUI 12.3 레이아웃 관리하기 

① pubic void setLayout(LayoutManager mgr)         레이아웃을 설정하는 메소드이다 . ② public synchronized void validate()         컨테이너와 포함된 모든 요소들을 다시 디스플레이한다 . ③ public LayoutManager getLayout()         컨테이너에 설정된 레이아웃을 반환한다 .

12. JAVA GUI12. JAVA GUI

12.3.1 FlowLayout

  생성자

① public FlowLayout()

    기본적으로 요소들이 중앙에 정렬하도록 한다 .

② public FlowLayout(int alignment)

alignment의 값에 따라 요소를 배치시킨다 . alignment는 

FlowLayout.Left, FlowLayout.Right, FlowLayout.Center

③ public FlowLayout(int alignment, int horizon_gap, int vert_gap)

    요소의 배치 기준 및 요소간의 수평거리 및 수직거리를 명시 

12. JAVA GUI12. JAVA GUI[예제 코드 ] public class FlowDemo extends Applet implements ActionListener { private Button l, c, r; public void init() { l = new Button( "Left" ); l.addActionListener( this ); add( l ); c = new Button( "Center" ); c.addActionListener( this ); add( c ); r = new Button( "Right" ); r.addActionListener( this ); add( r ); }

12. JAVA GUI12. JAVA GUI[예제 코드 ] public void actionPerformed( ActionEvent e ) { int align; if ( e.getSource() == l ) align = FlowLayout.LEFT; else if ( e.getSource() == c ) align = FlowLayout.CENTER; else align = FlowLayout.RIGHT; setLayout( new FlowLayout( align ) ); validate(); // refresh components } }

12. JAVA GUI12. JAVA GUI 12.3.2 BorderLayout

  생성자① public BorderLayout() BorderLayout 클래스를 생성한다 . ② public BorderLayout(int horizontal_gap, int vertical_gap)     수평 간격과 수직 간격을 설정한  BorderLayout 클래스를 생성한다 .

- BorderLayout의 위치   North

West Center East

South

12. JAVA GUI12. JAVA GUI[예제 코드 ] import java.applet.*; import java.awt.*; public class BorderLayoutDemo extends Applet { public void init() { setLayout(new BorderLayout(8, 2)); add(new Button("North"), BorderLayout.NORTH); add(new Button("South"), BorderLayout.SOUTH); add(new Button("Center"), BorderLayout.CENTER); add(new Button("West"), BorderLayout.WEST); add(new Button("East"), BorderLayout.EAST);

} }

12. JAVA GUI12. JAVA GUI

12.3.3 GridLayout

  생성자

① public GridLayout(int rows, int cols)

    줄수와 칸수를 지정한  GridLayout 클래스를 생성한다 .

② public GridLayout(int rows, int cols, int horizon_gap, int vert_gap)

    줄수 , 칸수 , 수평 및 수직 간격을 지정한  GridLayout 클래스를 

생성한다 .

[예제 코드 ] import java.applet.*; import java.awt.*; public class GridLayoutDemo extends Applet { public void init() { // 3줄  4칸 , 가로 간격  4, 세로 간격  1 setLayout(new GridLayout(3, 4, 4, 1)); add(new Button("1")); add(new Button("2")); add(new Button("3")); add(new Button("4")); add(new Button("5")); add(new Button("6")); add(new Button("7")); add(new Button("8")); add(new Button("9")); add(new Button("0")); add(new Button("+")); add(new Button("=")); } }

12. JAVA GUI12. JAVA GUI

12. JAVA GUI12. JAVA GUI 12.3.4 CardLayout

  생성자① public CardLayout()     기본값을 가진  CardLayout을 생성한다 . ② public CardLaout(int hgap, int vgap)     지정된 수직 간격과 수평 간격을 가진  CardLayout을 생성한다 .

사용 예 ) L1 = new Label("Memory:"); L2 = new Label("Printer:"); Panel p1 = new Panel(); p1.setLayout(new CardLayout()); // p1을  card-layout으로 설정  p1.add(L1, L1.getText()); p1.add(L1, L1.getText());

12. JAVA GUI12. JAVA GUI[예제 코드 ] import java.awt.*; import java.awt.event.*; public class CardLayoutDemo extends java.applet.Applet implements ActionListener, MouseListener { Label sunos, Win98, linux; Panel osCards; CardLayout cardLO; Button Win, Sun; public void init() { Win = new Button("MS-Windows"); Sun = new Button("Sun OS"); add(Win); add(Sun); // 두 개의 버튼  Win과  Sun을 만들어 붙임  cardLO = new CardLayout(); osCards = new Panel(); // osCards라는  panel을 생성  osCards.setLayout(cardLO); // osCards를  card layout으로 설정 

12. JAVA GUI12. JAVA GUI[예제 코드 ] Win98 = new Label("Windows 98 & NT"); sunos = new Label("Sun OS & Solaris"); linux = new Label("Linux 6.0"); osCards.add(Win98, "Windows"); osCards.add(sunos, "Sun"); osCards.add(linux,"linux"); // 세 개의 레이블을  osCard에 부착함  add(osCards); // panel osCard를 애플릿에 부착함  Win.addActionListener(this); // 버튼의 리스너 등록  Sun.addActionListener(this); addMouseListener(this); } public void mousePressed(MouseEvent me) { cardLO.next(osCards); // 마우스를 클릭하면 다른 카드를 보여줌   }

12. JAVA GUI12. JAVA GUI[예제 코드 ] public void mouseClicked(MouseEvent me) { } public void mouseEntered(MouseEvent me) { } public void mouseExited(MouseEvent me) { } public void mouseReleased(MouseEvent me) { } public void actionPerformed(ActionEvent ae) { if(ae.getSource() == Win) { cardLO.show(osCards, "Windows"); } else { cardLO.show(osCards, "Sun"); } } }

12. JAVA GUI12. JAVA GUI 12.3.5 GridBagLayout

  특징 ① 컴포넌트는 그리드에서 하나 이상의 방 (cell) 을 차지할 수 있다 . ② 서로 다른 행 , 열들의 크기를 서로 다르게 지정할 수 있다 . ③ 그리드 셀 내의 컴포넌트들이 서로 다른 방식으로 정렬될 수 있다 .

- GridBagLayout 설정 절차 ① GridBagLayout 객체를 생성하고 생성된 객체를 레이아웃 관리자로

등록 ( 코드예 ) GridBagLayout g1 = new GridBagLayout(); setLayout(g1); ② GridBagCaonstraints 의 객체 및 컴포넌트 객체들을 생성한다 . ( 코드예 ) GridBagConstraints c1 = new GridBagConstraints(); Button b1 = new Button("Compute"); Button b2 = new Button("Cancel");

12. JAVA GUI12. JAVA GUI 12.3.5 GridBagLayout

- GridBagLayout 설정 절차 ③ 컴포넌트에 대한 위치 , 크기에 대한 값을 조정한다 . GridBagConstraints 객체의 내부 변수 gridx, gridy, gridwidth, gridheight, weightx, weighty 사용 ( 코드예 ) c1.gridx = 0; c1.gridy = 0; c1.gridwidth=1; c1.gridwidth=1; c1.weightx=20; c1.weighty=10; ④ 컴포넌트와 constraint 값을 설정한 후 , 컨테이너에 컴포넌트 를 추가 ( 코드예 ) g1.setConstraints(b1, c1); add(b1);

12. JAVA GUI12. JAVA GUI 12.3.5 GridBagLayout

GridBagConstraints ① public int gridx, gridy

② gridwidth, gridheight - 컴포넌트가 가로와 세로로 각각 몇 개의 셀을 차지할 것인가 지정 . ex) - 가로와 세로로 각각 한 셀을 차지하는 컴포넌트는 (1, 1) - 가로만 2 개의 셀을 . 세로는 한 셀을 차지하는 컴포넌트는 (2, 1)

12. JAVA GUI12. JAVA GUI 12.3.5 GridBagLayout

GridBagConstraints ③ weightx, weighty - 이 두 변수는 다른 행 , 열들과 비교하여 행과 열의 비를 결정 ex) 모든 컴포넌트의 weightx 와 weighty 의 값이 10 으로 동일함 모두 동일한 비율의 크기

ex) 컴포넌트 A 의 폭을 B 보다 1:2 의 비율로 설정 .

ex) - weightx 의 값을 0 으로 지정한 이유는 “ ditto( 상동 )” 이라는 의미 - 위에서 정의한 x 방향의 폭과 동일함을 의미

A (10, 10) B (10, 10)C (10, 10) D (10, 10)

A (10, 10) B (20, 10)C (0, 10) D (0, 10)

A (10, 20) B (20, 0)C (0, 10) D (0, 0)

12. JAVA GUI12. JAVA GUI 12.3.5 GridBagLayout

GridBagConstraints ④ fill - fill 변수는 컴포넌트가 셀 안에서 늘어나는 방향을 결정 - GridBagConstraints.BOTH: 컴포넌트가 상하 좌우 모두 늘어남 - GridBagConstraints.HORIZONTAL: 컴포넌트가 좌우로 늘어남 - GridBagConstraints.VERTICAL: 컴포넌트가 상하로 늘어남 - GridBagConstraints.NONE: 컴포넌트가 최소의 크기로 . ⑤ insets - 컴포넌트와 컴포넌트를 둘러싸고 있는 영역간의 간격 설정 . ⑥ anchor - anchor 변수는 셀의 크기보다 작은 컴포넌트 위치 결정 . - anchor 의 값 CENTER( 기본값 ), NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST ⑦ ipadx, ipady - 컴포넌트 주변의 빈 공간을 설정 - ipadx 는 컴포넌트 좌우의 여분 공간 설정 - ipady 는 컴포넌트 상하의 여분 공간을 설정

12. JAVA GUI12. JAVA GUI[ 예제 프로그램 ] import java.awt.*; public class GridBagDemo extends java.applet.Applet { void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) { gbc.gridx = gx; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; } public void init() { GridBagLayout gb = new GridBagLayout(); GridBagConstraints c1 = new GridBagConstraints(); setLayout(gb);

// Text Field Area buildConstraints(c1, 0, 0, 3, 1, 0, 20); c1.fill = GridBagConstraints.BOTH;

12. JAVA GUI12. JAVA GUI [ 예제 프로그램 ] TextField tf1 = new TextField(20); gb.setConstraints(tf1, c1); add(tf1); // Buttons buildConstraints(c1, 0, 1, 1, 1, 10, 10); c1.fill = GridBagConstraints.HORIZONTAL; Button b1 = new Button("1"); gb.setConstraints(b1, c1); add(b1);

buildConstraints(c1, 1, 1, 1, 1, 10, 0); c1.fill = GridBagConstraints.HORIZONTAL; Button b2 = new Button("2"); gb.setConstraints(b2, c1); add(b2);

buildConstraints(c1, 2, 1, 1, 1, 10, 0); c1.fill = GridBagConstraints.HORIZONTAL; Button b3 = new Button("3"); gb.setConstraints(b3, c1); add(b3);

12. JAVA GUI12. JAVA GUI [ 예제 프로그램 ] buildConstraints(c1, 0, 2, 1, 1, 0, 10); c1.fill = GridBagConstraints.HORIZONTAL; Button b4 = new Button("+"); gb.setConstraints(b4, c1); add(b4); buildConstraints(c1, 1, 2, 2, 1, 0, 0); c1.fill = GridBagConstraints.HORIZONTAL; Button b5 = new Button("="); gb.setConstraints(b5, c1); add(b5); } }