14. 기타 gui components
DESCRIPTION
14. 기타 GUI Components. 14. 기타 GUI Components. 14.1 Window 클래스와 Frame 클래스 14.1.1 Window 클래스 ( 추상 클래스 ) 윈도우 클래스 생성자 ① public Window(Frame parent ) 지원되는 메소드 ① public synchronized void pack() 윈도우 안의 컴포넌트들을 선호하는 크기로 재배치한다 . ② public void show() - PowerPoint PPT PresentationTRANSCRIPT
14. 14. 기타 기타 GUI ComponentsGUI Components
14. 14. 기타 기타 GUI ComponentsGUI Components14.1 Window 클래스와 Frame 클래스 14.1.1 Window 클래스 (추상 클래스 )
윈도우 클래스 생성자 ① public Window(Frame parent) 지원되는 메소드 ① public synchronized void pack() 윈도우 안의 컴포넌트들을 선호하는 크기로 재배치한다 . ② public void show() 생성된 윈도우를 보여주는 메소드이다 . ③ public synchronized void dispose() 윈도우와 그 내용을 제거한다 . ④ public void toBack() 이 메소드를 호출한 윈도우 뒤에 부모 윈도우를 위치시킨다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.2 Frame 클래스 - Frame은 Window 클래스의 하위 클래스
생성자 ① public Frame() BoderLayout 관리자를 사용하는 프레임 객체를 생성한다 .② public Frame(String title) BoderLayout 관리자를 사용하고 , 프레임의 타이틀을 명시한 프레임 객체를 생성한다 . 지원되는 메소드 ① public String getTitle() 프레임의 타이틀 값을 반환한다 .② public void setTitle(String title) 프레임의 타이틀 값을 설정한다 . ③ public void setIconImage(Image image) 프레임이 아이콘으로 변경되었을 때 사용할 이미지를 설정한다 . ④ public MenuBar getMenuBar() 프레임안에 포함된 MenuBar 객체를 반환 . ⑤ public synchronized void setMenuBar(MenuBar mb) 프레임안에 디스플레이될 MenuBar 를 설정한다 . ⑥ public synchronized void remove(MenuComponent m) 프레임안에서 원하는 메뉴 컴포넌트를 제거한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components[Frame 객체 예제 프로그램 ] import java.applet.*; import java.awt.*; import java.awt.event.*; public class FrameDemo extends Applet implements ActionListener { public void init() { Button b1 = new Button("Create New Frame"); b1.addActionListener(this); add(b1); // 애플릿에 프레임 추가 } public void actionPerformed(ActionEvent ae) { MyFrame my = new MyFrame("My Frame"); my.setSize(160, 120); // 프레임 크기 설정 my.show(); } } class MyFrame extends Frame { static int i = 1;
14. 14. 기타 기타 GUI ComponentsGUI Components[Frame 객체 예제 프로그램 ] MyFrame(String title) { super(title); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { // 윈도우 종료 루틴 설정 setVisible(false); dispose(); System.exit(0); } }); Label la = new Label(" New Frame: #" + (i++)); add(la); } }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
메뉴 프로그래밍 과정 ① Frame 객체와 MenuBar 객체를 생성한다 . ② MenuBar 객체를 setMenuBar() 메소드를 사용 프레임에 추가 ③ Menu 객체를 생성한다 . add() 메소드를 이용하여 MenuBar 에 Menu 객체를 추가 ④ MenuItem 또는 CheckboxMenuItem 객체를 생성 ⑤ add() 메소드를 이용하여 생성된 MenuItem을 추가 ⑥ M
enuItem에 적절한 Listener 를 등록한 후 이벤트 처리 루틴을 작성
메뉴바 , 메뉴 , 메뉴아이템
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) 메뉴바 클래스 메뉴바는 수평 막대기 모양으로 메뉴가 들어갈 터를 잡아주는 컴포넌 트이다 . 일반적으로 프레임 윈도우의 상단에 위치한다 . 프로그램에서 사용하고자 하는 모든 메뉴들은 메뉴바 안에 위치하여야 한다 . 메뉴바의 생성자의 형식은 다음과 같다 . public MenuBar()
메뉴바에 메뉴를 추가 /삭제하는데 사용되는 메소드는 다음과 같다 . ① public synchronized Menu add(Menu m) 메뉴바에 메뉴를 추가한다 . ② public synchronized void remove(int index) 인덱스를 사용하여 메뉴바에서 메뉴를 삭제한다 . ③ public synchronized void remove (MenuComponent m) 원하는 메뉴 컴포넌트를 삭제한다 . ④ public int getMenuCount() 메뉴바에 포함된 메뉴의 수를 반환한다 . ⑤ public Menu getMenu(int index) 특정 위치의 메뉴를 반환한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) 메뉴 메뉴바 위에 보이는 레이블이 바로 메뉴 객체이며 , 메뉴 객체는 add() 메소드를 통해서 메뉴 바에 포함될 수 있다 . 마우스로 MenuBar 위의 메뉴를 클릭하면 , 메뉴 아이템이 메뉴 밑으로 디스플레이 된다 . 메뉴 객체의 생성자를 정리하면 다음과 같다 .
① public Menu() 가장 기본적인 메뉴를 생성한다 . ② public Menu(String label) 원하는 레이블을 가진 메뉴를 생성한다 . ③ public Menu(String label, boolean tearOff) 메뉴에 들어갈 레이블및 메뉴를 떼어놓을 것인지를 지정할 수 있다 . tearOff 값이 true 이면 tear-off 메뉴가 된다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
메뉴 객체에서 지원되는 메소드는 다음과 같다 . ① public synchronized MenuItem add(MenuItem m) 메뉴에 원하는 메뉴 아이템 m을 추가한다 . ② public void add(String label) 메뉴에 원하는 메뉴 아이템을 추가한다 . ③ public synchronized void insert(MenuItem m, int index) 메뉴의 원하는 위치에 메뉴 아이템을 추가한다 . ④ public synchronized void insert(Sring label, int index) 메뉴의 원하는 위치에 메뉴 아이템을 추가한다 . ⑤ public synchronized void remove(int index) 메뉴에서 원하는 위치의 메뉴 아이템을 삭제한다 . ⑥ public synchronized void remove(MenuComponent item) 메뉴에서 원하는 메뉴 컴포넌트를 삭제한다 . ⑦ public synchronized void removeAll() 메뉴에 포함된 모든 메뉴 아이템을 삭제한다 . ⑧ public MenuItem getItem(int index) 메뉴에서 특정 위치에 있는 메뉴 아이템을 반환한다 . ⑨ public void addSeparator() 메뉴의 마지막 부분에 분리선을 추가한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
메뉴 아이템 MenuItem 는 메뉴 객체 안에 위치하며 , 실제 사용자에 의해
선택되는 항목이다 . 메뉴 아이템은 마우스를 통해서 선택되거나 키보드에
의해 서 선택될 수 있다 . 이때 키보드의 값을 단축키라고 한다 . 메뉴
아이템 은 다음과 같은 생성자를 가진다 . ① public MenuItem() 기본적인 메뉴 아이템을 생성한다 . ② public MenuItem(String label) 원하는 레이블을 가진 메뉴 아이템을 생성한다 . ③ public MenuItem(String label, MenuShortcut s) 원하는 레이블과 단축키를 가진 메뉴 아이템을 생성한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
메뉴 아이템 클래스가 지원하는 메소드는 다음과 같다 . ① public synchronized void setLabel(String label) 메뉴 아이템의 레이블을 설정한다 . ② public String getLabel() 메뉴 아이템의 레이블을 반환한다 . ③ public synchronized void setEnabled(boolean b) 메뉴 아이템이 선택 가능 여부를 설정한다 . 인자의 값이 true 일 때
선택 가능하다 . ④ public void setShortcut(MenuShortcut s) 메뉴 아이템에 단축키를 설정한다 . ⑤ public void MenuShortcut getShortcut() 메뉴 아이템에 지정된 단축키를 반환한다 . ⑥ void addActionListener(ActionListener al) 메뉴 아이템의 액션 이벤트를 리스너에 등록한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
체크박스 메뉴 아이템 CheckboxMenuItem 은 메뉴에서 체크 박스를 사용할 수 있게 해준다 .
마우스로 메뉴에 있는 체크박스를 클릭할 때마다 on-off 토글이
발생 한다 . 체크 박스 메뉴 아이템은 메뉴 아이템에 체크 기능을 추가한 것이므로 , 기본적인 사용 방법은 메뉴 아이템과 동일하다 .
체크박스 메뉴 아이템 클래스의 생성자를 정리하면 다음과 같다 . ① public CheckboxMenuItem() 기본적인 체크박스 메뉴 아이템을 생성한다 . ② public CheckboxMenuItem(String label) 원하는 문자열을 가진 체크박스 메뉴 아이템을 생성한다 . ③ public CheckboxMenuItem(String label, boolean state) 원하는 문자열 및 초기상태를 설정할 수 있는 생성자이다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
체크박스 메뉴 아이템 클래스에서 지원되는 메소드는 다음과 같다 . ① public boolean getState() 체크 박스의 on/off 상태를 반환한다 . ② public synchronized void setState(boolean b) 체크 박스의 상태를 설정한다 . ③ void addItemListener(ItemListener l) 체크 박스 메뉴 아이템의 이벤트를 리스너에 등록한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
[ 예제 프로그램 ] import java.awt.*; import java.awt.event.*; public class MenuDemo extends java.applet.Applet { MenuFrame f; public void init() { f= new MenuFrame("Menu Demo"); int width=Integer.parseInt(getParameter("width")); int height=Integer.parseInt(getParameter("height")); f.setSize(width, height); f.setVisible(true); } public void start() { f.setVisible(true); } public void stop() { f.setVisible(false); } }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)[ 예제 프로그램 ] class MenuFrame extends Frame implements ActionListener, ItemListener { String msg = ""; CheckboxMenuItem cb1, cb2; MenuFrame(String title) { super(title); MenuBar menubar = new MenuBar(); setMenuBar(menubar); Menu file = new Menu("Document"); MenuItem item1, item2, item3, item4, item5; file.add(item1= new MenuItem("new")); file.add(item2= new MenuItem("open")); file.add(item3= new MenuItem("read")); file.add(item4= new MenuItem("-")); file.add(item5= new MenuItem("end")); Menu edit = new Menu("Edit"); MenuItem item6, item7, item8, item9, item10; edit.add(item6 = new MenuItem("cut")); edit.add(item7 = new MenuItem("paste")); cb1 = new CheckboxMenuItem("sign 1"); cb2 = new CheckboxMenuItem("sign 2");
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)[ 예제 프로그램 ] edit.add(cb1); edit.add(cb2); edit.add(item8 = new MenuItem("-")); Menu sub = new Menu("Doc. Info"); sub.add(item9 = new MenuItem("password")); sub.add(item10 = new MenuItem("pages")); edit.add(sub); menubar.add(file); menubar.add(edit); item1.addActionListener(this); item2.addActionListener(this); item3.addActionListener(this); item4.addActionListener(this); item5.addActionListener(this); item6.addActionListener(this); item7.addActionListener(this); item8.addActionListener(this); item9.addActionListener(this); item10.addActionListener(this); cb1.addItemListener(this); cb2.addItemListener(this); }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
[ 예제 프로그램 ] public void actionPerformed(ActionEvent e) { msg = "Your selection is "; String arg = (String) e.getActionCommand(); if(arg.equals("new")) msg += "new"; else if(arg.equals("open")) { FileDialog f = new FileDialog(this, "File Dialog"); f.setVisible(true); } else if(arg.equals("read")) msg += "read"; else if(arg.equals("end")) { setVisible(false); dispose(); System.exit(0); } else if(arg.equals("cut")) msg += "cut"; else if(arg.equals("paste")) msg += "paste"; else if(arg.equals("password")) msg += "password"; else if(arg.equals("pages")) msg += "pages"; repaint(); }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)[ 예제 프로그램 ] public void itemStateChanged(ItemEvent e) { repaint(); } public void paint(Graphics g) { g.drawString(msg, 10, 150); if(cb1.getState()) g.drawString("sign 1 On", 10, 180); else g.drawString("sign 1 Off", 10, 180); if(cb2.getState()) g.drawString("sign 2 On", 10, 200); else g.drawString("sign 2 Off", 10, 200); } } [HTML 파일 ] <html> <head><title> Menu Bar Demo</title></head> <body> <applet code="MenuDemo" width=300 height=300> </applet> </body> </html>
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) PopupMenu PopupMenu 는 자바 애플릿 실행시간에 Container 객체 안의 임의
위치 에 나타날 수 있는 팝업 메뉴를 구현하기 위한 클래스이다 . 팝업 메뉴 는 키보드나 마우스를 사용한 특정 이벤트가 발생하면 화면에 나타나 게 되는 데 , 팝업 메뉴를 발생시키는 이벤트는 운영체제마다 다르다 .
MS 윈도우의 경우 컴포넌트 위에 마우스 포인터를 위치시킨 후 오른 버튼을 클릭하면 팝업 메뉴가 나타난다 .
[ 생성자 ] ① public PopupMenu() - 팝업 메뉴를 생성한다 . ② public PopupMenu(String label) - 원하는 이름을 가진 팝업 메뉴를 생성한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
PopupMenu PopMenu 클래스는 Menu 클래스의 파생 클래스이므로 , Menu
클래스의
메소드를 모두 사용할 수 있다 . 특히 팝업 메뉴를 동작시키는 방법이 운
영체제에 따라 다르므로 , 이를 감지하는 메소드 isPopupTrigger() 가
MouseEvent 클래스에서 지원된다 . 그러므로 팝업 메뉴를화면에 출력하
기 위해서는 먼저 마우스 리스너에서 isPopupTrigger() 메소드를 사용하
여 현재 발생한 마우스 이벤트가 팝업 메뉴를 호출하는 것이었는지를
감지 하여야 한다 .
다음 예제 프로그램은 Frame 에 팝업 메뉴를 등록한 애플릿이다 . 오른쪽
마우스 버튼을 클릭하면 팝업메뉴가 나타나며 , 선택한 메뉴 아이템이
하단에 디스플레이 된다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
import java.awt.*; import java.awt.event.*; public class popupDemo extends java.applet.Applet { PopupMenuDemo f; public void init() { f= new PopupMenuDemo(); add(f); f.setVisible(true); }
class PopupMenuDemo extends Frame { PopupMenu pm = new PopupMenu("Demo"); Label t1 = new Label("Click Right button", Label.CENTER); public PopupMenuDemo() { super("Popup Menu Demo"); Canvas c1 = new Canvas(); add(c1,BorderLayout.CENTER); c1.addMouseListener(new mouseListener());
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
pm.add(addMenuItem("popup menu one")); pm.add(addMenuItem("popup menu two")); pm.add(addMenuItem("popup menu three")); pm.add(addMenuItem("-")); pm.add(addMenuItem("Exit")); c1.add(pm); add(t1, BorderLayout.SOUTH); addWindowListener(new windowListener()); setSize(300,200); show(); } MenuItem addMenuItem(String t1) { MenuItem item = new MenuItem(t1); item.setActionCommand(t1); item.addActionListener(new actionListener()); return item; } class actionListener implements ActionListener { public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); t1.setText("Your selection is " + str); if(str.equals("Exit")) { setVisible(false);
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)dispose(); System.exit(0); } } }
class mouseListener extends MouseAdapter { public void mouseReleased(MouseEvent e) { if(e.isPopupTrigger()) { pm.show(e.getComponent(), e.getX(), e.getY()); } } } class windowListener extends WindowAdapter { public void windowClosing(WindowEvent e) { Object o1 = e.getSource(); if(o1 == PopupMenuDemo.this) { setVisible(false); dispose(); System.exit(0); } } } } }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) Dialog 클래스 Dialog 클래스는 사용자에게 간단한 정보를 디스플레이하거나
정보를 입력받기 위하여 사용되는 윈도우 파생 클래스이다 .
[ 생성자 ] ① public Dialog(Frame parent) - parent 는 Dialog 윈도우를 제어하는 Frame 타입의 부모 윈도우를
나타낸다 . ② public Dialog(Frame parent, boolean flag) - flag 는 생성된 Dialog 가 modal(true) 인지 modaless 인지를 나타낸다 .
③ public Dialog(Frame parent, String title) - title 은 생성된 Dialog 윈도우의 제목을 지정한다 . ④ public Dialog(Frame parent, String title, boolean flag) - 생성된 dialog 윈도우의 제목과 타입을 설정한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) [Dialog Box 를 사용하는 예제 프로그램 ]
import java.applet.*; import java.awt.*; import java.awt.event.*; public class DialogDemo extends Applet implements ActionListener { public void init() { Button b = new Button("Create Frame"); b.addActionListener(this); add(b); }
public void actionPerformed(ActionEvent ae) { MyFrame2 mf = new MyFrame2("My Frame"); mf.setSize(200, 140); mf.show(); } }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
[Dialog Box 를 사용하는 예제 프로그램 ] class MyFrame2 extends Frame implements ActionListener { Label label = new Label("", Label.CENTER); MyFrame2(String title) { super(title); Button la = new Button("Create Dialog"); add(la,BorderLayout.CENTER); la.addActionListener(this); add(label, BorderLayout.SOUTH); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { setVisible(false); dispose(); System.exit(0); } }); }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) [Dialog Box 를 사용하는 예제 프로그램 ] public void actionPerformed(ActionEvent ae) { String message = "Do you like Dialog Box?"; MessageDialog md = new MessageDialog(this, "Message Dialog", true, message); md.show(); if(md.answer() == true) label.setText("Yes, You like it"); else label.setText("Oh! No!!!"); } } class MessageDialog extends Dialog implements ActionListener { Button yes, no; boolean YN; MessageDialog(Frame parent, String title, boolean mode, String messa
ge) { super(parent, title, mode); Panel pc = new Panel(); Label label = new Label(message); pc.add(label); add(pc, "Center");
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) [Dialog Box 를 사용하는 예제 프로그램 ] Panel ps = new Panel(); yes = new Button("Yes"); yes.addActionListener(this); ps.add(yes); no = new Button("No"); no.addActionListener(this); ps.add(no); add(ps, "South"); pack(); } public void actionPerformed(ActionEvent e) { String ans = e.getActionCommand(); if(ans.equals("Yes")) YN = true; else YN = false; dispose(); } public boolean answer() { return YN; } }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu) File Dialog 클래스
- FileDialog 는 파일을 선택할 수 있는 다이얼로그를 생성하는 클래스 - 모달 타입 [ 생성자 ] ① public FileDialog(Frame parent) - parent 는 다이어로그 윈도우를 제어하는 부모 프레임을 지정한다.
② public FileDialog(Frame parent, String title) - title 은 제목을 지정한다 . ③ public FileDialog(Frame parent, String title, int rw) - rw 는 파일을 읽어 올 것 ( 상수 : LOAD) 인지 저장할 것 ( 상수 : SAVE)
인지를 지정한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
File Dialog 클래스
FileDialog 클래스에서 지원되는 메소드를 정리하면 다음과 같다 .
① public synchronized void setDirectory(String dir)
- 파일 다이얼로그에서 디스플레이될 디렉토리를 설정한다 .
② public synchronized void setFile(String file)
- 파일 다이얼로그에서 특정 파일 (file) 을 선택한다 .
③ public synchronized void setFilenameFilter(FilenameFilter filter)
- 파일 다이얼로그에서 사용될 필터를 설정한다 .
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
[파일 다이얼로그 예제 프로그램 ] import java.applet.*; import java.awt.*; import java.awt.event.*; public class FileDialogDemo extends Applet { public void init() { MyFrame3 my = new MyFrame3("Frame"); my.setSize(240, 150); // Set Frame Size my.show(); // Set Frame visible } } class MyFrame3 extends Frame implements ActionListener { MyFrame3(String title) { super(title); Button la = new Button("Create FileDialog"); la.addActionListener(this); add(la);
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)
[파일 다이얼로그 예제 프로그램 ] addWindowListener(new WindowAdapter() { // We can close the frame. public void windowClosing(WindowEvent we) { setVisible(false); dispose(); System.exit(0); } }); } public void actionPerformed(ActionEvent ae) { FileDialog fd = new FileDialog(this, "File Dialog"); fd.setVisible(true); } }
14. 14. 기타 기타 GUI ComponentsGUI Components14.1.3 메뉴 (menu)