전자공학실험 2 1 WEEK10: SWING AND EVENT HANDLING Fall, 2014 건국대전자공학부 Notice: 주별강의 / 실습 /HW 내용 2 Week Date 강의주제 Homework 실습과제 Handouts 1 09월 03일 Orientation Lab1 Lecture0 2 09월 10일 추석 3 09월 17일 Using Objects Lab2 Lecture1 4 09월 24일 Classes, Objects HW1 Lab3 Lecture2 5 10월 01일 Inheritance, Interface HW2 Lab4 Lecture3 6 10월 08일 Exception Handling, Thread HW3 Lab5 Lecture4 7 10월 15일 File, I/O Streams - Byte Stream HW4 Lab6 Lecture5 8 10월 22일 Mid-term Exam. 9 10월 29일 File, I/O Streams-Char. Stream Lab9 Lecture9 10 11월 05일 Swing & Event Handling Lab10 Lecture10 11 11월 12일 Java Network Programming I HW11 Lab11 Lecture11 12 11월 19일 Java Network Programming II HW12 Lab12 Lecture12 13 11월 26일 Android Programming I HW13 Lab13 Lecture13 14 12월 03일 Android Programming II Lab14 Lecture14 15 12월 10일 Android Programming III Lab15 Lecture15 16 12월 17일 Final Exam 건국대학교전자공학부 1
실습결과보고서제출일 3 Lab.10.1~10.8 : Due Nov. 12 Lab.10.9~10.11 : Due Nov. 19 Notice: Grading Policy Midterm: 10% Final Exam: 20% Term projects: 40% Labs 20% Attendance : 10% Total: 100 Midterm: 10% Final Exam: 30% Labs 30% Attendance : 10% Total: 80 건국대학교전자공학부 2
실습및결과보고방식변경 5 팀 ( 실습조 ) 단위에서개인단위로변경 어느정도적응기간을거친것으로판단 평가의공정성과변별력제고 실습시기존의고정좌석제폐지! 11/5 실습좌석배치 6 성명실험조난수좌석번호성명실험조난수좌석번호 이채준 6 0.021455 1 박구병 7 0.491018 13 적아휘 7 0.056123 2 박정훈 4 0.527585 14 이준엽 9 0.066823 3 윤치열 5 0.542705 15 주성호 2 0.129454 4 임준형 3 0.548247 16 이서우 6 0.187719 5 유홍식 9 0.564632 17 민인기 5 0.221988 6 정치영 9 0.580557 18 최재은 1 0.225317 7 나지원 6 0.668645 19 윤재형 1 0.226765 8 이윤호 2 0.74075 20 이희준 4 0.381541 9 김창섭 8 0.756163 21 신승훈 3 0.385686 10 이한용 8 0.811005 22 조현민 8 0.399053 11 김지혜 5 0.86838 23 원용범 4 0.487787 12 문찬용 7 0.934871 24 건국대학교전자공학부 3
스윙컴포넌트예시 7 JButton JCheckBox JRadioButton JSlider JPasswordField JSpinner JTextField JTextArea JComboBox JList Swing 으로만든 GUI 프로그램샘플 8 JButton JLabel JTextField 프레임윈도우닫기버튼 JMenu JToolBar JFrame JMenuBar JComboBox JList JLabel JScrollPane JSplitPane 건국대학교전자공학부 4
GUI 라이브러리계층구조 Object Font FontMetrics Component Dimension Color Graphics AWT 클래스 Button Label TextComponent Container List Canvas Scrollbar Panel Window Checkbox Choice Applet Frame Dialog Swing 클래스 JComponent JApplet JFrame JDialog JLabel JList JComboBox JSlider JTextComponent AbstractButton JScrollBar JPanel JLayeredPane JEditorPane JTextField JTextArea JOptionPane JTabbedPane JSplitPane JSeparator JRootPane JToolBar JPasswordField JMenuItem JButton JToggleButton JMenuBar JToolTip JPopupMenu JFileChooser JMenu JCheckBox JColorChooser JTree JTable JTableHeader JCheckBoxMenuItem JRadioButton JProgressBar JSpinner JScrollPane JInternalFrame JRadioButtonMenuItem 9 10 건국대학교전자공학부 5
11 Lab.10-1: FirstSwing.java 주어진 Java Program 을실행시켜보고결과를보임. 프로그램에대해간단히설명. 실행시나타난프레임창우상단 X 를클릭해보고어떤일이일어나는지분석. 프로그램을종료하려면? import java.awt.*; import javax.swing.*; class FirstSwing public static void main(string[] args) JFrame frm=new JFrame("First Swing"); frm.setbounds(120, 120, 400, 100); frm.setlayout(new FlowLayout()); JButton btn1=new JButton("My Button"); JButton btn2=new JButton("Your Button"); JButton btn3=new JButton("Our Button"); frm.add(btn1); frm.add(btn2); frm.add(btn3); frm.setvisible(true); 12 건국대학교전자공학부 6
13 14 건국대학교전자공학부 7
15 Lab.10-2: EventHandler.java 주어진 Java Program 을실행시켜보고결과를보이시오. 그리고프로그램에대해간단히설명하시오. 세번째버튼이클릭되면프로그램이종료되도록수정. import java.awt.*; import java.awt.event.*; import javax.swing.*; class MouseEventHandler implements MouseListener /* 마우스버튼이클릭되었을때 ( 눌렸다풀렸을때 ) 호출됩니다. */ public void mouseclicked(mouseevent e) JButton button=(jbutton)e.getcomponent(); button.settext("clicked"); System.out.println("Clicked Button"+e.getButton()); System.out.println(" 마우스버튼눌렸다풀림 "); /* 마우스커서가버튼위에올라가면호출됩니다. */ public void mouseentered(mouseevent e) System.out.println(" 커서버튼위진입 "); (cont d on next slide) 16 Lab.10-2: EventHandler.java /* 마우스커서가버튼을빠져나가면호출됩니다. */ public void mouseexited(mouseevent e) System.out.println(" 커서버튼위탈출 "); /* 마우스버튼이눌리는순간호출됩니다. */ public void mousepressed(mouseevent e) System.out.println(" 마우스버튼눌림 "); /* 마우스버튼이풀리는순간호출됩니다. */ public void mousereleased(mouseevent e) System.out.println(" 마우스버튼풀림 "); (cont d on next slide) 건국대학교전자공학부 8
17 Lab.10-2: EventHandler.java class EventHandler public static void main(string[] args) JFrame frm=new JFrame("First Swing"); frm.setbounds(120, 120, 400, 100); frm.setlayout(new FlowLayout()); JButton btn1=new JButton("My Button"); MouseListener listener=new MouseEventHandler(); btn1.addmouselistener(listener); JButton btn2=new JButton("Your Button"); btn2.addmouselistener(listener); JButton btn3=new JButton("Our Button"); btn3.addmouselistener(listener); frm.add(btn1); frm.add(btn2); frm.add(btn3); frm.setvisible(true); 18 건국대학교전자공학부 9
19 Layout Manager ( 배치관리자 ) 컨테이너와배치개념 20 컨테이너 (Container) 1. 컨테이너마다하나의배치관리자가존재하며, 삽입되는모든컴포넌트의위치와크기를결정하고적절히배치한다. 이쪽으로가세요. 2. 컨테이너의크기가변하면내부컴포넌트들의위치와크기를모두재조절하고재배치한다. 배치관리자 (Layout Manager) 컴포넌트 (Component) 건국대학교전자공학부 10
배치관리자대표유형 4 가지 21 java.awt 패키지에구현되어있음 FlowLayout BorderLayout 이쪽으로가세요. 이쪽으로가세요. GridLayout CardLayout 이쪽으로가세요. 이쪽으로가세요. 22 건국대학교전자공학부 11
23 Lab.10-3: FlowLayoutManager.java 주어진 Java Program 을실행시켜보고결과를보이시오. 메소드 getpreferr edsize() 에대해간단히설명. (Optional) 프레임창우상단 x 클릭 3 초후프레임창이다시나타나도록수정. import java.awt.*; import javax.swing.*; class FlowLayoutManager public static void main(string[] args) JFrame frm=new JFrame("FlowLayout Test"); frm.setbounds(120, 120, 400, 200); frm.setlayout(new FlowLayout()); frm.add(new JButton("Hi!")); frm.add(new JButton("I like Swing")); frm.add(new JButton("I am a button")); frm.add(new LargeButton("Hi!")); frm.add(new LargeButton("I like Swing")); frm.add(new LargeButton("I am a button")); frm.setvisible(true); (cont d on next slide) 24 Lab.10-3: FlowLayoutManager.java class LargeButton extends JButton public LargeButton(String str) super(str); public Dimension getpreferredsize() Dimension largebtmsz =new Dimension( super.getpreferredsize().width+30, super.getpreferredsize().height+15 ); return largebtmsz; 건국대학교전자공학부 12
25 26 건국대학교전자공학부 13
27 28 Lab.10-4: MultiLayoutManager.java 주어진 Java Program 을실행시켜보고결과를보이시오. 그리고프로그램을분석. 프레임의크기를변경해보고결과기술. Container, Component 클래스의차이점을기술. import java.awt.*; import javax.swing.*; class MultiLayoutManager public static void main(string[] args) JFrame frm=new JFrame("Multi Layout Manager"); frm.setbounds(120, 120, 250, 150); frm.setlayout(new BorderLayout()); JButton btm1=new JButton("B1"); JButton btm2=new JButton("B2"); JButton btm3=new JButton("B3"); JButton btm4=new JButton("B4"); JButton btm5=new JButton("B5"); JButton btm6=new JButton("B6"); JButton btm7=new JButton("B7"); JButton btm8=new JButton("B8"); JButton btm9=new JButton("B9"); JButton btm10=new JButton("B10"); (cont d on next slide) 건국대학교전자공학부 14
29 Lab.10-4: MultiLayoutManager.java JPanel panel1=new JPanel(); panel1.setlayout(new FlowLayout()); panel1.add(btm1); panel1.add(btm2); panel1.add(btm3); panel1.add(btm4); JPanel panel2=new JPanel(); panel2.setlayout(new GridLayout(2, 3, 2, 2)); panel2.add(btm5); panel2.add(btm6); panel2.add(btm7); panel2.add(btm8); panel2.add(btm9); panel2.add(btm10); frm.add(panel1, BorderLayout.NORTH); frm.add(panel2, BorderLayout.CENTER); frm.setvisible(true); 30 Events and Event Listener 건국대학교전자공학부 15
31 32 Lab.10-5: JButtonMouseEvent.java 주어진 Java Program 을실행시켜보고결과를분석하시오. 결과를통해마우스이벤트와액션이벤트의차이점을관찰하고설명. import java.awt.*; import javax.swing.*; import java.awt.event.*; class MouseEventHandler implements MouseListener public void mouseclicked(mouseevent e) System.out.println(" 마우스버튼눌렸다풀림 "); public void mouseentered(mouseevent e) public void mouseexited(mouseevent e) public void mousepressed(mouseevent e) public void mousereleased(mouseevent e) class JButtonMouseEvent public static void main(string[] args) (cont d on next slide) 건국대학교전자공학부 16
33 Lab.10-5: JButtonMouseEvent.java JFrame frm=new JFrame("JButton Disable"); frm.setbounds(120, 120, 250, 150); frm.setlayout(new FlowLayout()); MouseListener mousehandler=new MouseEventHandler(); JButton btn1=new JButton("Button One"); btn1.addmouselistener(mousehandler); JButton btn2=new JButton("Button Two"); btn2.addmouselistener(mousehandler); frm.add(btn1); frm.add(btn2); btn1.setenabled(false); frm.setvisible(true); 34 건국대학교전자공학부 17
35 Lab.10-6: JButtonActionEvent.java 주어진 Java Program 을실행시켜보고결과를분석하시오. 결과를통해마우스이벤트와액션이벤트의차이점을관찰하고설명. import java.awt.*; import javax.swing.*; import java.awt.event.*; class ActionEventHandler implements ActionListener public void actionperformed(actionevent e) System.out.println(e.getActionCommand()); class JButtonActionEvent public static void main(string[] args) JFrame frm=new JFrame("JButton Disable"); frm.setbounds(120, 120, 250, 150); frm.setlayout(new FlowLayout()); JButton btn1=new JButton("Button One"); JButton btn2=new JButton("Button Two"); ActionListener actionhandler=new ActionEventHandler(); btn1.addactionlistener(actionhandler); btn2.addactionlistener(actionhandler); frm.add(btn1); frm.add(btn2); btn1.setenabled(false); frm.setvisible(true); 36 건국대학교전자공학부 18
37 38 건국대학교전자공학부 19
39 40 Lab.10-7: MouseMotionEvent.java import javax.swing.*; import java.awt.event.*; 주어진 Java Program 을실행시켜보고결과를분석. X 클릭시 dispose() 호출을통하여프로그램종료가되도록수정. class MouseMotionHandler implements MouseMotionListener public void mousedragged(mouseevent e) System.out.printf("Drag [%d %d] \n", e.getx(), e.gety()); public void mousemoved(mouseevent e) System.out.printf("Move [%d %d] \n", e.getx(), e.gety()); class MouseMotionEvent public static void main(string[] args) throws Exception JFrame frm=new JFrame("Mouse Motion"); frm.setbounds(120, 120, 250, 150); frm.addmousemotionlistener(new MouseMotionHandler()); frm.setvisible(true); frm.setdefaultcloseoperation(windowconstants.dispose_on_close); 건국대학교전자공학부 20
41 42 건국대학교전자공학부 21
43 Lab.10-8: AdapterAnonymousHandling.java 주어진 Java Program 을실행시켜보고결과를보이시오. 그리고프로그램을분석하시오. 익명클래스에대해설명하고어떤경우에유용한지설명하시오. import javax.swing.*; import java.awt.event.*; class AdapterAnonymousHandling public static void main(string[] args) JFrame frm=new JFrame("Mouse Motion"); frm.setbounds(120, 120, 250, 150); frm.addmouselistener( new MouseAdapter() public void mouseclicked(mouseevent e) System.out.println(" 마우스버튼눌렸다풀림 "); ); E); frm.setvisible(true); frm.setdefaultcloseoperation(windowconstants.dispose_on_clos 건국대학교전자공학부 22