Download presentation
Presentation is loading. Please wait.
Published byΛυκούργος Κασιδιάρης Modified 6년 전
1
GUI 환경에서 작동하는 프로그램에 대하여 윈도우 프로그램의 작성 방법 그래픽과 이미지 디스플레이 방법 오디오 파일 재생 방법
2
01. GUI 환경에서 작동하는 프로그램 GUI 프로그래밍 윈도우 프로그램에 대하여 • 텍스트 모드 프로그램과 윈도우 프로그램
a) 텍스트 모드의 프로그램 b) 윈도우 프로그램
3
01. GUI 환경에서 작동하는 프로그램 GUI 프로그래밍 윈도우 프로그램에 대하여
• 텍스트 모드 프로그램과 윈도우 프로그램의 구조적 차이
4
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 윈도우 프로그램의 구조 • 네 단계로 실행되는 윈도우 프로그램
5
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 윈도우의 구성요소 • 윈도우의 기본적인 구성요소
• 컴포넌트(component) 프레임, 타이틀 바, content pane, 라벨 등의 구성요소를 통틀어 이르는 용어 타이틀 바(title bar) 프레임(frame) content pane 라벨(label)
6
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 윈도우의 구성요소 • 컴포턴트들이 겹쳐진 층으로 구성되는 윈도우 프레임
타이틀 바 content pane Hello, Java 라벨
7
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 윈도우를 구성하는 방법 • 프레임 만드는 방법
8
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 윈도우를 구성하는 방법 • 타이틀이 표시된 프레임 만드는 방법
9
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 윈도우를 구성하는 방법 • 라벨 만드는 방법
10
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 윈도우를 구성하는 방법
• 프레임에 종속된 content pane을 가져오는 방법
11
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 윈도우를 구성하는 방법
• content pane 위에 라벨을 올려놓는 방법
12
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 윈도우를 디스플레이하는 방법 • 프레임을 적절한 크기로 조정하는 방법
13
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 윈도우를 디스플레이하는 방법 • 프레임을 디스플레이하는 방법
14
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 윈도우로 작동하는 Hello, Java 프로그램
모니터 화면 프로그램을 컴파일해서 실행하면 바탕화면 왼쪽 상단에 윈도우가 나타납니다 1 2 3 4 5 6 7 8 9 10 11 12 import java.awt.*; import javax.swing.*; class WindowExample1 { public static void main(String[] args) { JFrame frame = new JFrame("Hello Java Program"); Container contentPane = frame.getContentPane(); JLabel label = new JLabel("Hello, Java"); contentPane.add(label); frame.pack(); frame.setVisible(true); } 1단계: 윈도우를 구성한다. 2단계: 윈도우를 디스플레이한다
15
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 Hello, Java 프로그램 완성하기 • 윈도우의 위치를 지정하는 방법
16
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 모니터상의 좌표 체계 (0, 0) X 좌표는 왼쪽에서 오른쪽으로 증가
좌표는 위에서 아래로 증가 모니터 화면
17
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 Hello, Java 프로그램 완성하기 • 프레임의 크기를 바꾸는 방법
18
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 Hello, Java 프로그램 완성하기 • 라벨의 위치를 지정하는 방법
19
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 Hello, Java 프로그램 완성하기
• 버튼을 눌렀을 때 윈도우가 닫히도록 만드는 방법
20
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 Hello, Java 프로그램 완성하기
모니터 화면 프로그램을 실행하면 바탕화면 중앙에 윈도우가 나타납니다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.awt.*; import javax.swing.*; class WindowExample1 { public static void main(String[] args) { JFrame frame = new JFrame("Hello Java Program"); frame.setLocation(500, 400); frame.setPreferredSize(new Dimension(300, 200)); Container contentPane = frame.getContentPane(); JLabel label = new JLabel("Hello, Java", SwingConstants.CENTER); contentPane.add(label); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 프레임의 위치와 크기를 지정합니다. 라벨의 텍스트를 중앙에 표시 버튼을 눌렀을 때 해야할 일을 지정
21
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 텍스트 상자와 버튼 • 지금부터 작성할 예제의 윈도우 텍스트 상자 버튼
라벨
22
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 텍스트 상자와 버튼 • 텍스트 상자를 만드는 방법
23
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 텍스트 상자와 버튼 • 버튼을 만드는 방법
24
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 텍스트 상자와 버튼
• 여러 개의 컴포넌트를 content pane 위에 올려놓는 방법 – 잘못된 예 이렇게 하면 마지막에 추가된 라벨만 보이게 됩니다 contentPane.add(text); contentPane.add(button); contentPane.add(label);
25
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 텍스트 상자와 버튼
• content pane의 기본 레이아웃 – border layout
26
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 텍스트 상자와 버튼
• 여러 개의 컴포넌트를 content pane 위에 올려놓는 방법 – 올바른 예 contentPane.add(text, BorderLayout.CENTER); contentPane.add(button, BorderLayout.EAST); contentPane.add(label, BorderLayout.SOUTH); 이렇게 배치됩니다
27
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 텍스트 상자와 버튼
[예제 19-3] 텍스트 상자와 버튼이 있는 Hello 프로그램 (미완성) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.awt.*; import javax.swing.*; class WindowExample2 { public static void main(String[] args) { JFrame frame = new JFrame("Hello Program"); frame.setPreferredSize(new Dimension(200, 70)); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); JTextField text = new JTextField(); JButton button = new JButton("확인"); JLabel label = new JLabel("Hello"); contentPane.add(text, BorderLayout.CENTER); contentPane.add(button, BorderLayout.EAST); contentPane.add(label, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 1단계: 윈도우를 구성한다 2단계: 윈도우를 디스플레이한다
28
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 버튼 이벤트의 처리 방법 • 텍스트 상자의 텍스트를 가져오는 방법
29
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 버튼 이벤트의 처리 방법 • 라벨에 텍스트를 표시하는 방법
30
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 버튼 이벤트의 처리 방법 • 버튼을 눌렀을 때 해야할 일을 기술하는 방법
31
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 버튼 이벤트의 처리 방법
• 버튼을 눌렀을 때 actionPerformed 메소드가 호출되도록 만드는 방법
32
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 버튼 이벤트의 처리 방법
[예제 19-4] 텍스트 상자와 버튼이 있는 Hello 프로그램 (완성) main 메소드를 포함하는 클래스 확인 버튼을 처리하는 리스너 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.awt.*; import javax.swing.*; import java.awt.event.*; class WindowExample2 { public static void main(String[] args) { JFrame frame = new JFrame("Hello Program"); frame.setPreferredSize(new Dimension(200, 70)); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); JTextField text = new JTextField(); JButton button = new JButton("확인"); JLabel label = new JLabel("Hello"); contentPane.add(text, BorderLayout.CENTER); contentPane.add(button, BorderLayout.EAST); contentPane.add(label, BorderLayout.SOUTH); ActionListener listener = new ConfirmButtonActionListener(text, label); button.addActionListener(listener); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import javax.swing.*; import java.awt.event.*; class ConfirmButtonActionListener implements ActionListener { JTextField text; JLabel label; ConfirmButtonActionListener(JTextField text, JLabel label) { this.text = text; this.label = label; } public void actionPerformed(ActionEvent e) { String name = text.getText(); label.setText("Hello, " + name); 텍스트 상자에 “선희”라고 입력하고 확인 버튼을 눌렀을 때 텍스트 상자에 “기영”이라고 입력하고 확인 버튼을 눌렀을 때
33
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 레이아웃과 패널 • 자주 사용되는 레이아웃들
34
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 레이아웃과 패널 • content pane의 레이아웃을 설정하는 방법
35
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 레이아웃과 패널
• content pane의 레이아웃을 설정하는 방법 (계속)
36
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 레이아웃과 패널
[예제 19-5] 여러 가지 레이아웃을 사용하는 프로그램들 grid layout을 사용하는 프로그램 flow layout을 사용하는 프로그램 box layout을 사용하는 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import java.awt.*; import javax.swing.*; class WindowExample3 { public static void main(String[] args) { JFrame frame = new JFrame("Zoo Program"); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); GridLayout layout = new GridLayout(3, 2); contentPane.setLayout(layout); contentPane.add(new JButton("얼룩말")); contentPane.add(new JButton("사자")); contentPane.add(new JButton("코끼리")); contentPane.add(new JButton("코뿔소")); contentPane.add(new JButton("펭귄")); contentPane.add(new JButton("하이에나")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import java.awt.*; import javax.swing.*; class WindowExample4 { public static void main(String[] args) { JFrame frame = new JFrame("Fruit Basket Program"); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); FlowLayout layout = new FlowLayout(); contentPane.setLayout(layout); contentPane.add(new JButton("사과")); contentPane.add(new JButton("파인애플")); contentPane.add(new JButton("오렌지")); contentPane.add(new JButton("포도")); contentPane.add(new JButton("레몬")); contentPane.add(new JButton(“복숭아")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import java.awt.*; import javax.swing.*; class WindowExample5 { public static void main(String[] args) { JFrame frame = new JFrame("Cafe Program"); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); BoxLayout layout = new BoxLayout(contentPane, BoxLayout.X_AXIS); contentPane.setLayout(layout); contentPane.add(new JButton("자바")); contentPane.add(new JButton("에스프레소")); contentPane.add(new JButton("카푸치노")); contentPane.add(new JButton("블루마운틴")); contentPane.add(new JButton("콜럼비아")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); }
37
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 레이아웃과 패널
• 다음과 같은 윈도우는 어떤 레이아웃을 이용해서 만들 수 있을까요? 패널(panel)을 만들어서 content pane 위에 올려놓고 그 위에 컴포넌트를 올려놓으면 됩니다.
38
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 레이아웃과 패널 • 패널을 이용하여 복합적인 레이아웃을 설정하는 방법
1) 패널을 생성해서 content pane 위에 추가합니다.
39
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 레이아웃과 패널 • 패널을 이용하여 복합적인 레이아웃을 설정하는 방법
2) 패널의 레이아웃을 설정합니다.
40
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 레이아웃과 패널 • 패널을 이용하여 복합적인 레이아웃을 설정하는 방법
3) add 메소드를 이용하여 패널 위에 컴포넌트를 추가합니다.
41
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 레이아웃과 패널
[예제 19-6] JPanel의 사용 예를 보여주는 프로그램 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.awt.*; import javax.swing.*; class WindowExample6 { public static void main(String[] args) { JFrame frame = new JFrame("연락처 프로그램"); frame.setPreferredSize(new Dimension(250, 150)); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(3, 2)); JTextField text1 = new JTextField(); JTextField text2 = new JTextField(); JTextField text3 = new JTextField(); panel.add(new JLabel("이름")); panel.add(text1); panel.add(new JLabel("주소")); panel.add(text2); panel.add(new JLabel("전화번호")); panel.add(text3); contentPane.add(panel, BorderLayout.CENTER); contentPane.add(new JButton("입력"), BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 패널을 생성합니다 패널의 레이아웃을 설정합니다 컴포넌트를 생성해서 패널에 추가합니다 패널을 content pane에 추가합니다
42
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 테이블 • 지금부터 작성할 예제의 윈도우 테이블 버튼
43
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 테이블 • 테이블을 만드는 방법 1) 테이블을 생성합니다.
44
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블 • 테이블을 만드는 방법
2) 스크롤 판을 만들어서 테이블을 올려놓고, 그 스크롤 판을 content pane 위에 올려놓습니다.
45
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블 [예제 19-7] 테이블이 있는 윈도우 프로그램 (미완성) 1 2
초기 상태 02. 윈도우 프로그램의 작성 방법 테이블 [예제 19-7] 테이블이 있는 윈도우 프로그램 (미완성) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.awt.*; import javax.swing.*; class WindowExample7 { public static void main(String[] args) { JFrame frame = new JFrame("참가자 명단 프로그램"); frame.setPreferredSize(new Dimension(300, 150)); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); String colNames[] = { "이름", "나이", "성별" }; Object data[][] = { { "김철수", 24, '남' }, { "이순희", 21, '여' }, { "박지영", 26, '여' } }; JTable table = new JTable(data, colNames); JScrollPane scrollPane = new JScrollPane(table); contentPane.add(scrollPane, BorderLayout.CENTER); JButton button = new JButton("출력"); contentPane.add(button, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 크기를 줄이면 스크롤 바가 나타납니다
46
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 있는 정보 가져오기
• 테이블의 데이터는 JTable 객체가 아닌 별도의 객체에 저장됨 모델(model)
47
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 테이블에 있는 정보 가져오기 • 테이블의 모델을 가져오는 방법
48
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 테이블에 있는 정보 가져오기 • 모델의 데이터를 가져오거나 바꾸는 방법
49
GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 테이블에 있는 정보 가져오기 • 모델로부터 테이블 정보를 가져오는 방법
50
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 있는 정보 가져오기
출력 버튼을 누르면 명령 프롬프트 창으로 테이블 내용이 출력됩니다 GUI 프로그래밍 02. 윈도우 프로그램의 작성 방법 테이블에 있는 정보 가져오기 [예제 19-8] 테이블이 있는 윈도우 프로그램 (완성) main 메소드를 포함하는 클래스 출력 버튼을 처리하는 리스너 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import java.awt.*; import javax.swing.*; class WindowExample7 { public static void main(String[] args) { JFrame frame = new JFrame("참가자 명단 프로그램"); frame.setPreferredSize(new Dimension(300, 150)); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); String colNames[] = { "이름", "나이", "성별" }; Object data[][] = { { "김철수", 24, '남' }, { "이순희", 21, '여' }, { "박지영", 26, '여' } }; JTable table = new JTable(data, colNames); JScrollPane scrollPane = new JScrollPane(table); contentPane.add(scrollPane, BorderLayout.CENTER); JButton button = new JButton("출력"); button.addActionListener(new PrintActionListener(table)); contentPane.add(button, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; class PrintActionListener implements ActionListener { JTable table; PrintActionListener(JTable table) { this.table = table; } public void actionPerformed(ActionEvent e) { TableModel model = table.getModel(); int rowNum = model.getRowCount(); int colNum = model.getColumnCount(); for (int col = 0; col < colNum; col++) { String colName = model.getColumnName(col); System.out.print(colName + "\t"); System.out.println(); for (int row = 0; row < rowNum; row++) { Object obj = model.getValueAt(row, col); System.out.print(obj + "\t"); System.out.println(" "); 모델을 가져옵니다. 모델에서 행과 열의 수를 가져옵니다. 컬럼 이름을 가져와서 출력합니다. 데이터를 가져와서 출력합니다.
51
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 행 추가/삭제하기
• 테이블을 생성할 때 자동으로 생기는 모델에는 행의 추가/삭제 기능이 없습니다. -> 테이블에 행을 추가/삭제하려면 모델을 직접 만들어서 사용해야 합니다.
52
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 행 추가/삭제하기
• 행 추가/삭제 기능이 있는 모델을 생성하는 방법
53
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 행 추가/삭제하기
• 직접 만든 모델에 연관된 테이블을 생성하는 방법
54
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 행 추가/삭제하기
• DefaultTableModel에 행을 추가하는 방법
55
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 행 추가/삭제하기
• DefaultTableModel에 있는 행을 삭제하는 방법
56
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 행 추가/삭제하기
[예제 19-9] 테이블에 행을 추가/삭제하는 윈도우 프로그램 main 메소드를 포함하는 클래스 [화면 설계] 삭제 버튼을 처리하는 리스너 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 import java.awt.*; import javax.swing.*; import javax.swing.table.*; class WindowExample8 { public static void main(String[] args) { JFrame frame = new JFrame("참가자 명단 프로그램"); frame.setPreferredSize(new Dimension(400, 200)); frame.setLocation(500, 400); Container contentPane = frame.getContentPane(); String colNames[] = { "이름", "나이", "성별" }; DefaultTableModel model = new DefaultTableModel(colNames, 0); JTable table = new JTable(model); contentPane.add(new JScrollPane(table), BorderLayout.CENTER); JPanel panel = new JPanel(); JTextField text1 = new JTextField(6); JTextField text2 = new JTextField(3); JTextField text3 = new JTextField(2); JButton button1 = new JButton("추가"); JButton button2 = new JButton("삭제"); panel.add(new JLabel("이름")); panel.add(text1); panel.add(new JLabel("나이")); panel.add(text2); panel.add(new JLabel("성별")); panel.add(text3); panel.add(button1); panel.add(button2); contentPane.add(panel, BorderLayout.SOUTH); button1.addActionListener( new AddActionListener(table, text1, text2, text3)); button2.addActionListener(new RemoveActionListener(table)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; class RemoveActionListener implements ActionListener { JTable table; RemoveActionListener(JTable table) { this.table = table; } public void actionPerformed(ActionEvent e) { int row = table.getSelectedRow(); if (row == -1) return; DefaultTableModel model = (DefaultTableModel) table.getModel(); model.removeRow(row); 추가 버튼을 처리하는 리스너 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; class AddActionListener implements ActionListener { JTable table; JTextField text1, text2, text3; AddActionListener(JTable table, JTextField text1, JTextField text2, JTextField text3) { this.table = table; this.text1 = text1; this.text2 = text2; this.text3 = text3; } public void actionPerformed(ActionEvent e) { String arr[] = new String[3]; arr[0] = text1.getText(); arr[1] = text2.getText(); arr[2] = text3.getText(); DefaultTableModel model = (DefaultTableModel) table.getModel(); model.addRow(arr);
57
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 테이블에 행 추가/삭제하기
[예제 19-9] 테이블에 행을 추가/삭제하는 윈도우 프로그램 – 실행 결과 초기 상태 이름, 나이, 성별을 입력하고 추가 버튼을 눌렀을 때 마우스로 행을 클릭하고 삭제 버튼을 눌렀을 때
58
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 그래픽 프리미티브로 그림 그리기 • 윈도우에 그림을 그리기 위해 필요한 것
- 종이의 역할 : 패널 클래스(Jpanel의 서브클래스) - 필기도구의 역할 : java.awt.Graphics 클래스
59
GUI 프로그래밍 03. 그래픽과 이미지 디스플레이 그래픽 프리미티브로 그림 그리기 • 지금부터 작성할 예제의 윈도우
60
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 그래픽 프리미티브로 그림 그리기 • 윈도우에 그림을 그리는 방법
그림이 그려진 패널을 만듭니다. 그 패널을 content pane 위에 올려놓습니다.
61
JDK 라이브러리 모듈에 의해 자동으로 호출됩니다.
GUI 프로그래밍 03. 그래픽과 이미지 디스플레이 그래픽 프리미티브로 그림 그리기 • 그림이 그려진 패널을 만드는 방법 1) JPanel의 서브클래스를 선언합니다. 이렇게 선언된 paint 메소드는 패널이 디스플레이 될 때 JDK 라이브러리 모듈에 의해 자동으로 호출됩니다.
62
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 그래픽 프리미티브로 그림 그리기 • 그림이 그려진 패널을 만드는 방법
2) paint 메소드 안에 다음과 같은 메소드 호출문을 써서 그림을 그립니다.
63
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 그래픽 프리미티브로 그림 그리기
[예제 19-10] 자동차 그림이 그려진 윈도우 프로그램 main 메소드를 포함하는 클래스 자동차 그림이 있는 패널 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.awt.*; import javax.swing.*; class GraphicExample1 { public static void main(String[] args) { JFrame frame = new JFrame("자동차 프로그램"); frame.setLocation(500, 200); frame.setPreferredSize(new Dimension(400, 300)); Container contentPane = frame.getContentPane(); CarDrawingPanel drawingPanel = new CarDrawingPanel(); contentPane.add(drawingPanel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 import javax.swing.*; import java.awt.*; class CarDrawingPanel extends JPanel { public void paint(Graphics g) { g.drawRect(100, 110, 200, 40); g.drawRect(150, 70, 100, 40); g.drawOval(125, 150, 30, 30); g.drawOval(245, 150, 30, 30); g.drawLine(50, 180, 350, 180); }
64
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 데이터를 이용해서 그래프 그리기 • 지금부터 작성할 예제의 윈도우
버튼을 눌렀을 때 그래프가 그려지도록 하려면 어떻게 해야할까요? paint 메소드 안에서 if 조건문을 사용하면 됩니다.
65
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 데이터를 이용해서 그래프 그리기
• 버튼을 눌렀을 때 막대 그래프가 그려지도록 하려면; -> repaint 메소드를 호출하여 paint 메소드를 간접 호출해야 합니다.
66
02. 윈도우 프로그램의 작성 방법 GUI 프로그래밍 데이터를 이용해서 그래프 그리기
• 하나의 paint 메소드를 가지고 두 가지 그림을 그리는 방법 class DrawingPanel extends JPanel { int korean, english, math; public void paint(Graphics g) { … if (korean > 0) g.fillRect(110, korean * 2, 10, korean * 2); if (english > 0) g.fillRect(210, english * 2, 10, english * 2); if (math > 0) g.fillRect(310, math * 2, 10, math * 2); } void setScores(int korean, int english, int math) { this.korean = korean; this.english = english; this.math = math; 국어, 영어, 수학 점수를 필드에 대입합니다 필드 값을 가져다가 막대 그래프를 그립니다 점수 필드 값을 설정하는 메소드
67
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 데이터를 이용해서 그래프 그리기 [예제 19-11] 성적 그래프 프로그램
점수를 입력하고 버튼을 누르면 막대 그래프가 출력됩니다 03. 그래픽과 이미지 디스플레이 데이터를 이용해서 그래프 그리기 [예제 19-11] 성적 그래프 프로그램 main 메소드를 포함하는 클래스 그래프를 그리는 패널 클래스 그래프 그리기 버튼을 처리하는 리스너 늘래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import java.awt.*; import javax.swing.*; class GraphicExample2 { public static void main(String[] args) { JFrame frame = new JFrame("성적 그래프 프로그램"); frame.setLocation(500, 200); frame.setPreferredSize(new Dimension(400, 350)); Container contentPane = frame.getContentPane(); DrawingPanel drawingPanel = new DrawingPanel(); contentPane.add(drawingPanel, BorderLayout.CENTER); JPanel controlPanel = new JPanel(); JTextField text1 = new JTextField(3); JTextField text2 = new JTextField(3); JTextField text3 = new JTextField(3); JButton button = new JButton("그래프 그리기"); controlPanel.add(new JLabel("국어")); controlPanel.add(text1); controlPanel.add(new JLabel("영어")); controlPanel.add(text2); controlPanel.add(new JLabel("수학")); controlPanel.add(text3); controlPanel.add(button); contentPane.add(controlPanel, BorderLayout.SOUTH); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); button.addActionListener(new DrawActionListener( text1, text2, text3, drawingPanel)); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import java.awt.*; import javax.swing.*; class DrawingPanel extends JPanel { int korean, english, math; public void paint(Graphics g) { g.clearRect(0, 0, getWidth(), getHeight()); g.drawLine(50, 250, 350, 250); for (int cnt = 1; cnt < 11; cnt++) { g.drawString(cnt*10 + "", 25, *cnt); g.drawLine(50, *cnt, 350, *cnt); } g.drawLine(50, 20, 50, 250); g.drawString("국어", 100, 270); g.drawString("영어", 200, 270); g.drawString("수학", 300, 270); g.setColor(Color.RED); if (korean > 0) g.fillRect(110, korean*2, 10, korean*2); if (english > 0) g.fillRect(210, english*2, 10, english*2); if (math > 0) g.fillRect(310, math*2, 10, math*2); void setScores(int korean, int english, int math) { this.korean = korean; this.english = english; this.math = math; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import javax.swing.*; import java.awt.event.*; class DrawActionListener implements ActionListener { JTextField text1, text2, text3; DrawingPanel drawingPanel; DrawActionListener(JTextField text1, JTextField text2, JTextField text3, DrawingPanel drawingPanel) { this.text1 = text1; this.text2 = text2; this.text3 = text3; this.drawingPanel = drawingPanel; } public void actionPerformed(ActionEvent e) { try { int korean = Integer.parseInt( text1.getText()); int english = Integer.parseInt( text2.getText()); int math = Integer.parseInt(text3.getText()); drawingPanel.setScores(korean, english, math); drawingPanel.repaint(); catch (NumberFormatException nfe) { JOptionPane.showMessageDialog(drawingPanel, "잘못된 숫자 포맷입니다.", "에러 메시지", JOptionPane.ERROR_MESSAGE);
68
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 이미지 디스플레이 • 지금부터 작성할 예제의 윈도우
이미지를 디스플레이할 패널 이미지 파일 이름을 입력하는 부분
69
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 이미지 디스플레이 • 이미지를 디스플레이하는 방법
1) JPanel의 서브클래스를 선언합니다.
70
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 이미지 디스플레이 • 이미지를 디스플레이하는 방법
2) Image 객체를 만드는데 필요한 Toolkit 객체를 얻습니다.
71
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 이미지 디스플레이 • 이미지를 디스플레이하는 방법
3) Toolkit 객체를 이용해서 Image 객체를 만듭니다.
72
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 이미지 디스플레이 • 이미지를 디스플레이하는 방법
4) Image 객체를 가지고 drawImage 메소드를 호출하면 이미지가 디스플레이됩니다.
73
나머지를 paitn 메소드 밖으로 빼는 것이 좋음
GUI 프로그래밍 03. 그래픽과 이미지 디스플레이 이미지 디스플레이 • 이미지를 그리는 로직이 포함된 paint 메소드 프로그램의 성능에 문제를 일으키는 방법임 drawImage 메소드 호출문을 제외한 나머지를 paitn 메소드 밖으로 빼는 것이 좋음
74
03. 그래픽과 이미지 디스플레이 GUI 프로그래밍 이미지 디스플레이 [예제 19-12] 이미지 로딩 프로그램 초기 상태
main 메소드를 포함하는 클래스 이미지를 디스플레이하는 패널 클래스 이미지 로드 버튼을 처리하는 리스너 늘래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.awt.*; import javax.swing.*; class ImageExample1 { public static void main(String[] args) { JFrame frame = new JFrame("이미지 로딩 프로그램"); frame.setLocation(500, 200); frame.setPreferredSize(new Dimension(500, 400)); Container contentPane = frame.getContentPane(); ImagePanel imagePanel = new ImagePanel(); contentPane.add(imagePanel, BorderLayout.CENTER); JPanel controlPanel = new JPanel(); JTextField text = new JTextField(30); JButton button = new JButton("이미지 로드"); controlPanel.add(text); controlPanel.add(button); contentPane.add(controlPanel, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); button.addActionListener( new LoadActionListener(text, imagePanel)); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.awt.*; import javax.swing.*; class ImagePanel extends JPanel { Image image; Toolkit toolkit = getToolkit(); void setPath(String path) { image = toolkit.getImage(path); } public void paint(Graphics g) { g.clearRect(0, 0, getWidth(), getHeight()); if (image != null) g.drawImage(image, 0, 0, this); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import javax.swing.*; import java.awt.event.*; class LoadActionListener implements ActionListener { JTextField text; ImagePanel imagePanel; LoadActionListener(JTextField text, ImagePanel imagePanel) { this.text = text; this.imagePanel = imagePanel; } public void actionPerformed(ActionEvent e) { imagePanel.setPath(text.getText()); imagePanel.repaint(); 초기 상태 이미지 파일의 경로명을 입력하고 버튼을 누르면 이미지가 나타납니다
75
04. 오디오 파일 재생하기 GUI 프로그래밍 오디오 파일의 재생 • 오디오 파일을 재생하는 방법 오디오 클립을 생성합니다.
오디오 클립을 플레이합니다.
76
GUI 프로그래밍 04. 오디오 파일 재생하기 오디오 파일의 재생 • 오디오 클립을 생성하는 방법 (1)
77
GUI 프로그래밍 04. 오디오 파일 재생하기 오디오 파일의 재생 • 오디오 클립을 생성하는 방법 (2)
78
GUI 프로그래밍 04. 오디오 파일 재생하기 오디오 파일의 재생 • 오디오 클립을 플레이하는 방법
79
플레이 버튼을 누르면 스피커를 통해 소리가 납니다
GUI 프로그래밍 04. 오디오 파일 재생하기 오디오 파일의 재생 [예제 19-13] 오디오 파일을 플레이하는 프로그램 main 메소드를 포함하는 클래스 [화면 설계] 플레이 버튼을 처리하는 리스너 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.awt.*; import javax.swing.*; class AudioExample1 { public static void main(String[] args) { JFrame frame = new JFrame("오디오 플레이 프로그램"); frame.setLocation(500, 200); frame.setPreferredSize(new Dimension(500, 70)); Container contentPane = frame.getContentPane(); contentPane.setLayout(new FlowLayout()); JTextField text = new JTextField(30); JButton button = new JButton("플레이"); contentPane.add(text); contentPane.add(button); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); button.addActionListener(new PlayActionListener(text)); frame.pack(); frame.setVisible(true); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import javax.swing.*; import java.awt.event.*; import java.applet.*; import java.net.*; import java.io.File; class PlayActionListener implements ActionListener { // 생성자 JTextField text; PlayActionListener(JTextField text) { this.text = text; } public void actionPerformed(ActionEvent e) { try { File file = new File(text.getText()); AudioClip audioClip = Applet.newAudioClip(file.toURL()); audioClip.play(); catch (MalformedURLException mue) { JOptionPane.showMessageDialog(text, "잘못된 파일명입니다.", "에러 메시지", JOptionPane.ERROR_MESSAGE); 초기 상태 오디오 파일의 경로명을 입력하고 플레이 버튼을 누르면 스피커를 통해 소리가 납니다
Similar presentations