330 likes | 438 Views
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()
E N D
14. 기타 GUI Components 14.1 Window 클래스와 Frame 클래스 14.1.1 Window 클래스(추상 클래스) • 윈도우클래스생성자 ①publicWindow(Frameparent) • 지원되는메소드 ①publicsynchronizedvoidpack() 윈도우안의컴포넌트들을선호하는크기로재배치한다. ②publicvoidshow() 생성된윈도우를보여주는메소드이다. ③publicsynchronizedvoiddispose() 윈도우와그내용을제거한다. ④publicvoidtoBack() 이메소드를호출한윈도우뒤에부모윈도우를위치시킨다.
14. 기타 GUI Components 14.1.2 Frame 클래스 -Frame은Window클래스의하위클래스 • 생성자 ①publicFrame() BoderLayout관리자를사용하는 프레임객체를생성한다. ②publicFrame(Stringtitle) BoderLayout관리자를사용하고, 프레임의 타이틀을명시한프레임객체를생성한다. • 지원되는메소드 ①publicStringgetTitle() 프레임의타이틀값을반환한다. ②publicvoidsetTitle(Stringtitle) 프레임의타이틀값을설정한다. ③publicvoidsetIconImage(Imageimage) 프레임이아이콘으로변경되었을때사용할이미지를설정한다. ④publicMenuBargetMenuBar() 프레임안에포함된MenuBar객체를반환. ⑤publicsynchronizedvoidsetMenuBar(MenuBarmb) 프레임안에디스플레이될MenuBar를설정한다. ⑥publicsynchronizedvoidremove(MenuComponentm) 프레임안에서원하는메뉴컴포넌트를제거한다.
14. 기타 GUI 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. 기타 GUI 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. 기타 GUI Components 14.1.3 메뉴 (menu) 메뉴바, 메뉴, 메뉴아이템 • 메뉴프로그래밍과정 ①Frame객체와MenuBar객체를생성한다. ②MenuBar객체를setMenuBar()메소드를사용프레임에추가 ③Menu객체를생성한다. add()메소드를이용하여MenuBar에Menu객체를추가 ④MenuItem또는CheckboxMenuItem객체를생성 ⑤add()메소드를이용하여생성된MenuItem을추가 ⑥MenuItem에적절한Listener를등록한후이벤트처리루틴을 작성
14. 기타 GUI Components • 메뉴바클래스 메뉴바는수평막대기모양으로메뉴가들어갈터를잡아주는컴포넌 트이다.일반적으로프레임윈도우의상단에위치한다.프로그램에서 사용하고자하는모든메뉴들은메뉴바안에위치하여야한다. 메뉴바의생성자의형식은다음과같다. publicMenuBar() • 메뉴바에메뉴를추가/삭제하는데사용되는메소드는다음과같다. ①publicsynchronizedMenuadd(Menum) 메뉴바에메뉴를추가한다. ②publicsynchronizedvoidremove(intindex) 인덱스를사용하여메뉴바에서메뉴를삭제한다. ③publicsynchronizedvoidremove(MenuComponentm) 원하는메뉴컴포넌트를삭제한다. ④publicintgetMenuCount() 메뉴바에포함된메뉴의수를반환한다. ⑤publicMenugetMenu(intindex) 특정위치의메뉴를반환한다. 14.1.3 메뉴 (menu)
14. 기타 GUI Components • 메뉴 메뉴바위에보이는레이블이바로메뉴객체이며,메뉴객체는 add() 메소드를통해서메뉴바에포함될수있다.마우스로 MenuBar위의 메뉴를클릭하면,메뉴아이템이메뉴밑으로 디스플레이 된다.메뉴객체의생성자를정리하면다음과같다. ①publicMenu() 가장기본적인메뉴를생성한다. ②publicMenu(Stringlabel) 원하는레이블을가진메뉴를생성한다. ③publicMenu(Stringlabel,booleantearOff) 메뉴에들어갈레이블및메뉴를떼어놓을것인지를지정할 수있다. tearOff값이true이면tear-off메뉴가된다. 14.1.3 메뉴 (menu)
14. 기타 GUI Components • 메뉴객체에서지원되는메소드는다음과같다. ①publicsynchronizedMenuItemadd(MenuItemm) 메뉴에원하는메뉴아이템m을추가한다. ②publicvoidadd(Stringlabel) 메뉴에원하는메뉴아이템을추가한다. ③publicsynchronizedvoidinsert(MenuItemm,intindex) 메뉴의원하는위치에메뉴아이템을추가한다. ④publicsynchronizedvoidinsert(Sringlabel,intindex) 메뉴의원하는위치에메뉴아이템을추가한다. ⑤publicsynchronizedvoidremove(intindex) 메뉴에서원하는위치의메뉴아이템을삭제한다. ⑥publicsynchronizedvoidremove(MenuComponentitem) 메뉴에서원하는메뉴컴포넌트를삭제한다. ⑦publicsynchronizedvoidremoveAll() 메뉴에포함된모든메뉴아이템을삭제한다. ⑧publicMenuItemgetItem(intindex) 메뉴에서특정위치에있는메뉴아이템을반환한다. ⑨publicvoidaddSeparator() 메뉴의마지막부분에분리선을추가한다. 14.1.3 메뉴 (menu)
14. 기타 GUI Components 14.1.3 메뉴 (menu) • 메뉴아이템 MenuItem는메뉴객체안에위치하며,실제사용자에의해선택되는 항목이다.메뉴아이템은마우스를통해서선택되거나키보드에의해 서선택될수있다.이때키보드의값을단축키라고한다.메뉴아이템 은다음과같은생성자를가진다. ①publicMenuItem() 기본적인메뉴아이템을생성한다. ②publicMenuItem(Stringlabel) 원하는레이블을가진메뉴아이템을생성한다. ③publicMenuItem(Stringlabel,MenuShortcuts) 원하는레이블과단축키를가진메뉴아이템을생성한다.
14. 기타 GUI Components 14.1.3 메뉴 (menu) • 메뉴아이템클래스가지원하는메소드는다음과같다. ①publicsynchronizedvoidsetLabel(Stringlabel) 메뉴아이템의레이블을설정한다. ②publicStringgetLabel() 메뉴아이템의레이블을반환한다. ③publicsynchronizedvoidsetEnabled(booleanb) 메뉴아이템이선택가능여부를설정한다.인자의값이true일때 선택가능하다. ④publicvoidsetShortcut(MenuShortcuts) 메뉴아이템에단축키를설정한다. ⑤publicvoidMenuShortcutgetShortcut() 메뉴아이템에지정된단축키를반환한다. ⑥voidaddActionListener(ActionListeneral) 메뉴아이템의액션이벤트를리스너에등록한다.
14. 기타 GUI Components 14.1.3 메뉴 (menu) • 체크박스 메뉴아이템 CheckboxMenuItem은메뉴에서체크박스를사용할수있게해준다. 마우스로메뉴에있는체크박스를클릭할때마다on-off토글이발생 한다.체크박스메뉴아이템은메뉴아이템에체크기능을추가한 것이므로,기본적인사용방법은메뉴아이템과동일하다.체크박스 메뉴아이템클래스의생성자를정리하면다음과같다. ①publicCheckboxMenuItem() 기본적인체크박스메뉴아이템을생성한다. ②publicCheckboxMenuItem(Stringlabel) 원하는문자열을가진체크박스메뉴아이템을생성한다. ③publicCheckboxMenuItem(Stringlabel,booleanstate) 원하는문자열및초기상태를설정할수있는생성자이다.
14. 기타 GUI Components 14.1.3 메뉴 (menu) • 체크박스메뉴아이템클래스에서지원되는메소드는다음과같다. ①publicbooleangetState() 체크박스의on/off상태를반환한다. ②publicsynchronizedvoidsetState(booleanb) 체크박스의상태를설정한다. ③voidaddItemListener(ItemListenerl) 체크박스메뉴아이템의이벤트를리스너에등록한다.
14. 기타 GUI Components [예제프로그램] importjava.awt.*; importjava.awt.event.*; publicclassMenuDemoextendsjava.applet.Applet{ MenuFramef; publicvoidinit(){ f=newMenuFrame("MenuDemo"); intwidth=Integer.parseInt(getParameter("width")); intheight=Integer.parseInt(getParameter("height")); f.setSize(width,height); f.setVisible(true); } publicvoidstart(){ f.setVisible(true); } publicvoidstop(){ f.setVisible(false); } } 14.1.3 메뉴 (menu)
14. 기타 GUI Components [예제프로그램] classMenuFrameextendsFrameimplements ActionListener,ItemListener{ Stringmsg=""; CheckboxMenuItemcb1,cb2; MenuFrame(Stringtitle){ super(title); MenuBarmenubar=newMenuBar(); setMenuBar(menubar); Menufile=newMenu("Document"); MenuItemitem1,item2,item3,item4,item5; file.add(item1=newMenuItem("new")); file.add(item2=newMenuItem("open")); file.add(item3=newMenuItem("read")); file.add(item4=newMenuItem("-")); file.add(item5=newMenuItem("end")); Menuedit=newMenu("Edit"); MenuItemitem6,item7,item8,item9,item10; edit.add(item6=newMenuItem("cut")); edit.add(item7=newMenuItem("paste")); cb1=newCheckboxMenuItem("sign1"); cb2=newCheckboxMenuItem("sign2"); 14.1.3 메뉴 (menu)
14. 기타 GUI Components [예제프로그램] edit.add(cb1); edit.add(cb2); edit.add(item8=newMenuItem("-")); Menusub=newMenu("Doc.Info"); sub.add(item9=newMenuItem("password")); sub.add(item10=newMenuItem("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.1.3 메뉴 (menu)
14. 기타 GUI Components [예제프로그램] publicvoidactionPerformed(ActionEvente){ msg="Yourselectionis"; Stringarg=(String)e.getActionCommand(); if(arg.equals("new"))msg+="new"; elseif(arg.equals("open")){ FileDialogf=newFileDialog(this,"FileDialog"); f.setVisible(true); } elseif(arg.equals("read"))msg+="read"; elseif(arg.equals("end")){ setVisible(false); dispose(); System.exit(0); } elseif(arg.equals("cut"))msg+="cut"; elseif(arg.equals("paste"))msg+="paste"; elseif(arg.equals("password"))msg+="password"; elseif(arg.equals("pages"))msg+="pages"; repaint(); } 14.1.3 메뉴 (menu)
14. 기타 GUI Components [예제프로그램] publicvoiditemStateChanged(ItemEvente){ repaint(); } publicvoidpaint(Graphicsg){ g.drawString(msg,10,150); if(cb1.getState()) g.drawString("sign1On",10,180); else g.drawString("sign1Off",10,180); if(cb2.getState()) g.drawString("sign2On",10,200); else g.drawString("sign2Off",10,200); } } [HTML파일] <html> <head><title>MenuBarDemo</title></head> <body> <appletcode="MenuDemo"width=300height=300> </applet></body></html> 14.1.3 메뉴 (menu)
14. 기타 GUI Components • PopupMenu PopupMenu는자바애플릿실행시간에Container객체안의임의위치 에나타날수있는팝업메뉴를구현하기위한클래스이다.팝업메뉴 는키보드나마우스를사용한특정이벤트가발생하면화면에나타나 게되는데,팝업메뉴를발생시키는이벤트는운영체제마다다르다. MS윈도우의경우컴포넌트위에마우스포인터를위치시킨후오른 버튼을클릭하면팝업메뉴가나타난다. [생성자] ①publicPopupMenu() -팝업메뉴를생성한다. ②publicPopupMenu(Stringlabel) - 원하는이름을가진팝업메뉴를생성한다. 14.1.3 메뉴 (menu)
14. 기타 GUI Components • PopupMenu PopMenu클래스는Menu클래스의파생클래스이므로,Menu클래스의 메소드를모두사용할수있다.특히팝업메뉴를동작시키는방법이운 영체제에따라다르므로,이를감지하는메소드isPopupTrigger()가 MouseEvent클래스에서지원된다.그러므로팝업메뉴를화면에출력하 기위해서는먼저마우스리스너에서isPopupTrigger()메소드를사용하 여현재발생한마우스이벤트가팝업메뉴를호출하는것이었는지를 감지 하여야한다. 다음예제프로그램은Frame에팝업메뉴를등록한애플릿이다.오른쪽 마우스버튼을클릭하면팝업메뉴가나타나며,선택한메뉴아이템이 하단에디스플레이된다. 14.1.3 메뉴 (menu)
14. 기타 GUI Components importjava.awt.*; importjava.awt.event.*; publicclasspopupDemoextendsjava.applet.Applet{ PopupMenuDemof; publicvoidinit(){ f=newPopupMenuDemo(); add(f); f.setVisible(true); } classPopupMenuDemoextendsFrame{ PopupMenupm=newPopupMenu("Demo"); Labelt1=newLabel("ClickRightbutton",Label.CENTER); publicPopupMenuDemo(){ super("PopupMenuDemo"); Canvasc1=newCanvas(); add(c1,BorderLayout.CENTER); c1.addMouseListener(newmouseListener()); 14.1.3 메뉴 (menu)
14. 기타 GUI Components 14.1.3 메뉴 (menu) pm.add(addMenuItem("popupmenuone")); pm.add(addMenuItem("popupmenutwo")); pm.add(addMenuItem("popupmenuthree")); pm.add(addMenuItem("-")); pm.add(addMenuItem("Exit")); c1.add(pm); add(t1,BorderLayout.SOUTH); addWindowListener(newwindowListener()); setSize(300,200); show(); } MenuItemaddMenuItem(Stringt1){ MenuItemitem=newMenuItem(t1); item.setActionCommand(t1); item.addActionListener(newactionListener()); returnitem; } classactionListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ Stringstr=e.getActionCommand(); t1.setText("Yourselectionis"+str); if(str.equals("Exit")){ setVisible(false);
14. 기타 GUI Components dispose(); System.exit(0); } } } classmouseListenerextendsMouseAdapter{ publicvoidmouseReleased(MouseEvente){ if(e.isPopupTrigger()){ pm.show(e.getComponent(),e.getX(),e.getY()); } } } classwindowListenerextendsWindowAdapter{ publicvoidwindowClosing(WindowEvente){ Objecto1=e.getSource(); if(o1==PopupMenuDemo.this){ setVisible(false); dispose(); System.exit(0); } } } } } 14.1.3 메뉴 (menu)
14. 기타 GUI Components • Dialog클래스 Dialog클래스는사용자에게간단한정보를디스플레이하거나정보를 입력받기 위하여사용되는윈도우파생클래스이다. [생성자] ①publicDialog(Frameparent) -parent는Dialog윈도우를제어하는Frame타입의부모윈도우를 나타낸다. ②publicDialog(Frameparent,booleanflag) -flag는생성된Dialog가modal(true)인지modaless인지를나타낸다. ③publicDialog(Frameparent,Stringtitle) -title은생성된Dialog윈도우의제목을지정한다. ④publicDialog(Frameparent,Stringtitle,booleanflag) -생성된dialog윈도우의제목과타입을설정한다. 14.1.3 메뉴 (menu)
14. 기타 GUI Components • [DialogBox를사용하는예제프로그램] importjava.applet.*; importjava.awt.*; importjava.awt.event.*; publicclassDialogDemoextendsAppletimplementsActionListener{ publicvoidinit(){ Buttonb=newButton("CreateFrame"); b.addActionListener(this); add(b); } publicvoidactionPerformed(ActionEventae){ MyFrame2mf=newMyFrame2("MyFrame"); mf.setSize(200,140); mf.show(); } } 14.1.3 메뉴 (menu)
14. 기타 GUI Components 14.1.3 메뉴 (menu) • [DialogBox를사용하는예제프로그램] classMyFrame2extendsFrameimplementsActionListener{ Labellabel=newLabel("",Label.CENTER); MyFrame2(Stringtitle){ super(title); Buttonla=newButton("CreateDialog"); add(la,BorderLayout.CENTER); la.addActionListener(this); add(label,BorderLayout.SOUTH); addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEventwe){ setVisible(false); dispose(); System.exit(0); } }); }
14. 기타 GUI Components • [DialogBox를사용하는예제프로그램] publicvoidactionPerformed(ActionEventae){ Stringmessage="DoyoulikeDialogBox?"; MessageDialogmd= newMessageDialog(this,"MessageDialog",true,message); md.show(); if(md.answer()==true) label.setText("Yes,Youlikeit"); else label.setText("Oh!No!!!"); } } classMessageDialogextendsDialogimplementsActionListener{ Buttonyes,no; booleanYN; MessageDialog(Frameparent,Stringtitle,booleanmode,Stringmessage) {super(parent,title,mode); Panelpc=newPanel(); Labellabel=newLabel(message); pc.add(label); add(pc,"Center"); 14.1.3 메뉴 (menu)
14. 기타 GUI Components • [DialogBox를사용하는예제프로그램] Panelps=newPanel(); yes=newButton("Yes"); yes.addActionListener(this); ps.add(yes); no=newButton("No"); no.addActionListener(this); ps.add(no); add(ps,"South"); pack(); } publicvoidactionPerformed(ActionEvente){ Stringans=e.getActionCommand(); if(ans.equals("Yes"))YN=true; elseYN=false; dispose(); } publicbooleananswer(){ returnYN; } } 14.1.3 메뉴 (menu)
14. 기타 GUI Components • FileDialog클래스 -FileDialog는파일을선택할수있는다이얼로그를생성하는클래스 -모달타입 [생성자] ①publicFileDialog(Frameparent) -parent는다이어로그윈도우를제어하는부모프레임을지정한다. ②publicFileDialog(Frameparent,Stringtitle) -title은제목을지정한다. ③publicFileDialog(Frameparent,Stringtitle,intrw) -rw는파일을읽어올것(상수:LOAD)인지저장할것(상수:SAVE) 인지를지정한다. 14.1.3 메뉴 (menu)
14. 기타 GUI Components 14.1.3 메뉴 (menu) • FileDialog클래스 FileDialog클래스에서지원되는메소드를정리하면다음과같다. ①publicsynchronizedvoidsetDirectory(Stringdir) -파일다이얼로그에서디스플레이될디렉토리를설정한다. ②publicsynchronizedvoidsetFile(Stringfile) -파일다이얼로그에서특정파일(file)을선택한다. ③publicsynchronizedvoidsetFilenameFilter(FilenameFilterfilter) -파일다이얼로그에서사용될필터를설정한다.
14. 기타 GUI Components 14.1.3 메뉴 (menu) [파일다이얼로그예제프로그램] importjava.applet.*; importjava.awt.*; importjava.awt.event.*; publicclassFileDialogDemoextendsApplet{ publicvoidinit(){ MyFrame3my=newMyFrame3("Frame"); my.setSize(240,150);//SetFrameSize my.show();//SetFramevisible } } classMyFrame3extendsFrameimplementsActionListener{ MyFrame3(Stringtitle){ super(title); Buttonla=newButton("CreateFileDialog"); la.addActionListener(this); add(la);
14. 기타 GUI Components 14.1.3 메뉴 (menu) [파일다이얼로그예제프로그램] addWindowListener(newWindowAdapter() {//Wecanclosetheframe. publicvoidwindowClosing(WindowEventwe){ setVisible(false); dispose(); System.exit(0); } }); } publicvoidactionPerformed(ActionEventae){ FileDialogfd=newFileDialog(this,"FileDialog"); fd.setVisible(true); } }
14. 기타 GUI Components 14.1.3 메뉴 (menu)