16 장 . 스윙

85
16 장 . 장장 1 public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 장 장장 장장장 장장장장장 System.out.println(" 장장장 장장 " + sum + " 장장장 "); } } JAVA

description

16 장 . 스윙. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println (" 두수의 합은 " + sum + " 입니다 "); } }. - PowerPoint PPT Presentation

Transcript of 16 장 . 스윙

Page 1: 16 장 .  스윙

16 장 . 스윙

1

public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 "); }}

JAVA

Page 2: 16 장 .  스윙

사용자 인터페이스인 스윙 컴포넌트의 사용에 관해 학습한다 .

JComponent 클래스에 관해 학습한다 .

스윙의 모든 컴포넌트 클래스에 관해 학습한다 .

학습목표

2

Page 3: 16 장 .  스윙

section 1 스윙 컴포넌트 - 1-1 스윙 (javax.swing) 패키지의 개요

- 1-2 JComponent 클래스

section 2 컴포넌트에서의 이벤트 처리

section 3 이미지 아이콘 (ImageIcon) 과 라벨 (Label)

section 4 텍스트 필드와 텍스트 에리어

section 5 버튼

목차

3

Page 4: 16 장 .  스윙

section 6 푸시 버튼

section 7 체크박스

section 8 라디오 버튼

section 9 콤보박스

section 10 리스트

section 11 스크롤 바

section 12 그룹 홀더

section 13 테이블

section 14 메뉴

목차

4

Page 5: 16 장 .  스윙

16장 . 스윙

1-1 스윙 (javax.swing) 패키지의 개요1 스윙 컴포넌트

5

스윙 (Swing)- 선 (sun) 사가 넷스케이프사와 공동으로 개발한 새로운 그래픽 툴킷 (toolkit)

- 그래픽을 JVM 이 자체적으로 처리

- 컴포넌트를 그리기 위해 실행 중인 컴퓨터에서 하나의 컴포넌트 ( 예를 들면 프레임 윈도 )

만을 사용

- 스윙과 관련된 모든 클래스들은 javax.swing 패키지에 포함

Page 6: 16 장 .  스윙

16장 . 스윙

1-1 스윙 (javax.swing) 패키지의 개요1 스윙 컴포넌트

6

스윙 패키지의 주요 클래스와 상속관계

525 page

Page 7: 16 장 .  스윙

16장 . 스윙

1-1 스윙 (javax.swing) 패키지의 개요1 스윙 컴포넌트

7

스윙 패키지 주요 클래스의 기능

클래스 설명AbstractButton 버튼과 연관된 클래스들의 상위 추상 클래스ButtonGroup 버튼을 그룹화하기 위한 클래스ImageIcon 이미지를 아이콘으로 캡슐화하여 제공하는 클래스

JApplet애플릿 (applet)의 스윙 버전으로  Applet 클래스로부터 상속된 클래스

JButton 스윙에서 사용하는 버튼 클래스JCheckBox 스윙에서 사용하는 체크박스 클래스JCheckBoxMenuItem 스윙의 메뉴에서 사용하는 체크박스 클래스JComboBox 풀다운 리스트를 보여줄 수 있는 콤보박스 클래스JComponent 모든 스윙 컴포넌트의 상위 클래스JLabel 스윙에서 사용하는 라벨 클래스JMenu 스윙의 메뉴에서 사용하는 메뉴 클래스JMenuBar 스윙의 메뉴바를 만들기 위한 클래스JMenuItem 스윙에서 사용하는 메뉴 관련 클래스의 상위 클래스

Page 8: 16 장 .  스윙

16장 . 스윙

1-1 스윙 (javax.swing) 패키지의 개요1 스윙 컴포넌트

8

스윙 패키지 주요 클래스의 기능

클래스 설명JPanel 스윙에서 사용하는 패널 클래스JRadioButton 스윙에서 사용하는 라디오 버튼 클래스JRadioButtonMenuItem 스윙의 메뉴에서 사용하는 라디오 버튼 클래스JScrollPane 스크롤 윈도를 나타내는 클래스JTabbedPane 그룹을 홀더 형태로 제공하는 윈도를 나타내는 클래스JTable 데이터를 행과 열로 나타내는 클래스JTextArea 스윙에서 사용하는 텍스트 에리어 클래스JTextComponent 스윙에서 사용하는 텍스트 관련 클래스들의 상위 클래스JTextFeild 스윙에서 사용하는 텍스트 필드 클래스JToggleButton JCheckBox 클래스와  JRadioButton 클래스의 상위 클래스JTree 트리 형태를 나타내는 클래스

Page 9: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스1 스윙 컴포넌트

9

Jcomponent 클래스- AWT 패키지의 Component 클래스와 Container 클래스의 하위 클래스

- 상위 클래스에서 제공되는 기본적인 기능 ( 메소드 ) 들을 그대로 상속받아 사용할 수 있다는 의미

Page 10: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스1 스윙 컴포넌트

10

JComponent  클래스의 상위 클래스와 하위 클래스

527 page

Page 11: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스1 스윙 컴포넌트

11

JComponent  클래스의 메소드

메소드 설명

protected void paintComponent(Graphics g)Graphics 객체  g를 이용하여 컴포넌트 (주로 패널 객체 )에 그래픽을 출력한다 .

void setFont(Font font) 컴포넌트에 나타낼 폰트를 설정한다 .

void setVisible(boolean aFlag) 컴포넌트를 나타낼 것인지를 지정한다 .

Page 12: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스2 컴포넌트에서의 이벤트 처리

12

받아들일 이벤트와 연관된 인터페이스를 사용하여 클래스 생성

GUI 구축을 위한 컴포넌트 객체를 생성 �

이벤트를 받아들인 컴포넌트 객체 ( 여기서는 버튼 객체 ) 에 리스너를 등록 �

public class MyButton implements ActionListener

JButton mybutton = new JButton("선택 ");

mybutton.addActionListener(this);

Page 13: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스2 컴포넌트에서의 이벤트 처리

13

add() 메소드를 사용하여 컴포넌트를 패널 ( 또는 프레임 ) 에 추가 �

이벤트를 처리할 이벤트 처리 루틴 작성 ( 예 : action 이벤트 )

public void actionPerformed(ActionEvent ae) {  label.setText(ae.getActionCommand()) ;}

add(mybutton);

Page 14: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스2 컴포넌트에서의 이벤트 처리

14

실습예제EventTest1.java

0102030405060708091011121314151617

import javax.swing.*; import java.awt.*; import java.awt.event.*; class ButtonEventTest extends JFrame implements ActionListener { private JLabel result = new JLabel(""); public ButtonEventTest() {

JButton male = new JButton("남자 ");

JButton female = new JButton("여자 ");

JLabel label = new JLabel("당신의 성별은 ? ");

Container ct = getContentPane(); ct.setLayout(new FlowLayout()); ct.add(male); ct.add(female); ct.add(label); ct.add(result); male.addActionListener(this); female.addActionListener(this);

이벤트 패키지 포함

사용자 인터페이스컴포넌트 생성

ActionListener인터페이스 포함이벤트 처리 결과를 저장할  JLabel 객체 생성

프레임과 연관된 컨테이너 객체 생성컨테이너 객체에 레이아웃 설정  (FlowLayout)

컴포넌트를 컨테이너에 추가

버튼 (male) 객체에 이벤트 리스너를 등록버튼 (female) 객체에 이벤트 리스너를 등록

Page 15: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스2 컴포넌트에서의 이벤트 처리

15

실습예제EventTest1.java

1819202122232425262728293031

setTitle("ButtonEvent Test"); setSize(300,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent ae) { result.setText(ae.getActionCommand()); }} public class EventTest1 { public static void main(String args[]) { new ButtonEventTest(); }}

이벤트 처리 루틴 작성버튼의 이름을읽어 라벨로 출력

Page 16: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스2 컴포넌트에서의 이벤트 처리

16

프로그램 설명- 03 :  이벤트 처리를 하는 프로그램을 작성하기 위해 java.event.*  패키지를 포함하였다 .

- 04 : GUI  구축을 위해 JFrame  클래스로부터 상속받아 클래스를 작성하였으며 ,  또한 이벤트를 처리하기 위해 ActionListener  인터페이스를 포함하여 클래스를 작성하였다 . 

사용자는 컴포넌트에서 처리할 이벤트의 종류가 어떤 것인지를 판단하여 포함할 인터페이스를 결정하여야 한다 .

- 05 : JLabel  객체를 생성하였다 .  이 클래스에 관해서는 다음 절에서 설명한다 .  이 클래스는 문자열을 나타내기 위한 객체이다 .  여기서는 버튼을 누르면 그 결과를 나타내기 위해 사용한다 .  메소드 밖에 private 으로 선언하였다 .

- 07~09 : GUI 에서 필요한 컴포넌트 객체를 생성하였다 .  두 개의 버튼 객체와 한 개의 라벨 객체를 생성하였다 .

- 10 :  생성한 프레임과 연관된 컨테이너 객체를 생성하였다 .

- 11 :  컨테이너에 컴포넌트를 배치할 때 사용할 배치관리자를 FlowLayout 으로 설정하였다 .

- 12~15 :  컨테이너에 컴포넌트를 추가하였다 .

Page 17: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스2 컴포넌트에서의 이벤트 처리

17

프로그램 설명- 16~17 :  두 개의 버튼에 이벤트 리스너를 등록하였다 .  이벤트 리스너를 등록한다는 의미는

해당 컴포넌트에서 등록한 이벤트가 발생하면 그것을 이벤트 처리 루틴에 보내어 처리한다는 의미이다 .  자바 프로그램에서 컴포넌트에서 발생된 이벤트를 처리하기 위해서는 반드시 컴포넌트에 관련 이벤트 리스너를 등록하여야 한다 .

- 23 :  ActionListener  인터페이스에는 actionPerformed(ActionEvent  ae)  메소드가 선언되어 있다 .  이 메소드를 오버라이딩하여 이벤트 처리 루틴을 작성한다 .  이 메소드는 Ac-

tionEvent  클래스의 객체를 매개변수로 받아들이고 있다 .  즉 JVM 은 이벤트 리스너가 등록된 컴포넌트에써 이벤트가 발생하면 ,  관련 클래스로부터 객체를 생성하여 이벤트 처리 루틴에게 넘겨주게 된다 .  이벤트 처리 루틴은 매개변수로 받은 이벤트 객체 정보를 이용하여 이벤트를 처리한다 .

- 24 : getActionCommand()  메소드는 이벤트가 발생한 컴포넌트가 가진 레이블 ( 버튼의 이름 ) 을 반환하는 메소드이다 .  반환된 이름을 출력할 객체의 내용으로 설정하고 있다 .   

Page 18: 16 장 .  스윙

16장 . 스윙

1-2 JComponent 클래스2 컴포넌트에서의 이벤트 처리

18

Page 19: 16 장 .  스윙

16장 . 스윙

3 이미지 아이콘 (ImageIcon) 과 라벨 (Label)

19

ImageIcon 클래스- 이미지를 아이콘화하여 제공하는 클래스

ImageIcon 클래스 생성자

ImageIcon(String filname)ImageIcon(URL url)

형식

Page 20: 16 장 .  스윙

16장 . 스윙

3 이미지 아이콘 (ImageIcon) 과 라벨 (Label)

20

ImageIcon  클래스의 메소드

메소드 설명

int getIconHeight() 아이콘의 높이를 픽셀 값으로 반환

int getIconWidth() 아이콘의 폭을 픽셀 값으로 반환

void paintIcon(Component comp,Graphics g, int x, int y)

Graphics 객체  g의  x, y의 위치에 아이콘을 그린다 . 아이콘을 그리는 작동에 대한 부가적인 정보는  comp에서 제공

Page 21: 16 장 .  스윙

16장 . 스윙

3 이미지 아이콘 (ImageIcon) 과 라벨 (Label)

21

JLabel 클래스 생성자

JLabel  클래스의 메소드

JLabel(Icon i)JLabel(String s)JLabel(String s, Icon i, int align)

형식

메소드 설명Icon getIcon() JLabel 객체가 가지고 있는  Icon 객체를 반환

String getText() JLabel 객체가 가지고 있는 문자열을 문자열 객체로 반환

void setIcon(Icon i) JLabel 객체에  i로 지정된 아이콘을 설정

void setText(String s) JLabel 객체에  s로 지정된 문자열을 설정

Page 22: 16 장 .  스윙

16장 . 스윙

3 이미지 아이콘 (ImageIcon) 과 라벨 (Label)

22

실습예제JLabelTest1.java

0102030405060708091011121314151617

import javax.swing.*; import java.awt.*; import java.awt.event.*; class JLabelDemo extends JFrame implements ActionListener { private JLabel result = new JLabel(""); public JLabelDemo() { ImageIcon ii = new ImageIcon("korea.gif");

JButton korea = new JButton("클릭하세요 ", ii);

Container ct = getContentPane(); ct.setLayout(new FlowLayout()); ct.add(korea); ct.add(result); korea.addActionListener(this); setTitle("JLabel Test"); setSize(500,150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true);

ActionListener 인터페이스 포함

국기의 사진을 이용하여  ImageIcon 객체 생성ImageIcon 객체를 이용하여버튼 객체 생성

버튼 (korea) 객체에이벤트 리스너를 등록

Page 23: 16 장 .  스윙

16장 . 스윙

3 이미지 아이콘 (ImageIcon) 과 라벨 (Label)

23

실습예제JLabelTest1.java

18192021222324252627

} public void actionPerformed(ActionEvent ae) {

result.setText("세계에서 가장 좋은 한국 입니다 ");

}}public class JLabelTest1 { public static void main(String[] args) { new JLabelDemo(); }}

문자열을 이벤트의 결과로(JLabel 객체 ) 출력

Page 24: 16 장 .  스윙

16장 . 스윙

3 이미지 아이콘 (ImageIcon) 과 라벨 (Label)

24

프로그램 설명- 07 :  이 프로그램은 앞 절의 전형적인 이벤트 처리 프로그램과 동일한 형태이다 .  다만

국기의 사진을 이용하여 ImageIcon  객체를 생성한 다음 ,  그 객체를 이용하여 버튼 객체를 생성하였다 .  다른 부분은 앞 절의 프로그램 설명 부분을 참조하기 바란다 .

Page 25: 16 장 .  스윙

16장 . 스윙

4 텍스트 필드와 텍스트 에리어

25

JTextField, JTextArea 클래스 생성자

JTextField()JTextField(int cols)JTextField(Sting str, int cols)JTextField(Sting str)JTextArea()JTextArea(String str)JTextArea(int rows, int cols)JTextArea(String str, int rows, int cols)

형식

Page 26: 16 장 .  스윙

16장 . 스윙

4 텍스트 필드와 텍스트 에리어

26

실습예제JTFandJTA.java

01020304050607080910111213141516

import javax.swing.*; import java.awt.*; import java.awt.event.*; class JTFandJTADemo extends JFrame implements ActionListener { private JTextField jtf; private JTextArea jta; public JTFandJTADemo() { jtf = new JTextField(20); jta = new JTextArea(7,20); Container ct = getContentPane(); ct.setLayout(new FlowLayout()); ct.add(jtf); ct.add(jta); jtf.addActionListener(this); setTitle("JTextField,JTextArea Test"); setSize(500,200);

20개의 문자를 저장할  JTextField 객체 생성

20개의 문자 7줄을 저장할 JTextArea 객체 생성

텍스트 필드 객체에 이벤트 리스너 등록

두 개의 텍스트 객체 선언

Page 27: 16 장 .  스윙

16장 . 스윙

4 텍스트 필드와 텍스트 에리어

27

실습예제JTFandJTA.java

17181920212223242526272829

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent ae) { jta.append(ae.getActionCommand()+"\n"); jtf.setText(""); }}public class JTFandJTA { public static void main(String[] args) { new JTFandJTADemo(); }}

텍스트 에리어에 문자열을추가 (append())텍스트 필드를 clear

Page 28: 16 장 .  스윙

16장 . 스윙

4 텍스트 필드와 텍스트 에리어

28

프로그램 설명- 06~16 :  두 개의 텍스트 관련 객체를 선언하였다 .  이벤트 처리 루틴에서도 사용하기

때문에 메소드 외부에 private 로 선언하였다 .

- 08 : 20 개의 문자를 저장할 수 있는 JTextField  객체를 생성하였다 .

- 09 : 20 개의 문자를 7 줄로 나타낼 수 있는 JTextArea  객체를 생성하였다 .

- 14 :  텍스트 필드에 입력한 내용을 텍스트 에리어에 나타내기 위해서는 텍스트 필드 이벤트 리스너를 등록해야 한다 . 

- 21 :  이벤트 처리 루틴에서 텍스트 필드에서 가져온 문자열을 텍스트 에리어에 첨가한다 . 

append()  메소드는 현재 텍스트 에리어에 추가하는 메소드이다 .

- 22 :  텍스트 필드의 내용을 clear  한다 .

Page 29: 16 장 .  스윙

16장 . 스윙

4 텍스트 필드와 텍스트 에리어

29

Page 30: 16 장 .  스윙

16장 . 스윙

5 버튼

30

AbstractButton  클래스의 주요 메소드

메소드 설명String getActionCommand() 버튼이 실행한 명령을 반환

void setActionCommand(String s) 버튼에 대해 새로운 실행 명령을  s로 설정

String getText() 버튼의 텍스트 (버튼의 이름으로 지정 ) 반환

void setText(String text) 버튼의 텍스트를  text로 설정

Icon getIcon() 버튼의 묵시적 아이콘을 반환

void setIcon(Icon icon) 버튼의 묵시적 아이콘을  icon으로 설정

Icon getPressedIcon() 버튼이 눌러졌을 때 나타낼 아이콘을 반환

void setPressedIcon(Icon icon) 버튼이 눌러졌을 때 나타낼 아이콘을  icon으로 설정

Icon getRolloverIcon() 버튼 위로 마우스가 지나갈 때 나타낼 아이콘을 반환

void setRolloverIcon(Icon icon) 버튼 위로 마우스가 지나갈 때 나타낼 아이콘을  icon으로 설정

Boolean isSelected() 버튼의 상태 (선택  : true, 비선택  : false)를 반환

void setSelected(Boolean b) 버튼의 선택 상태를  b로 설정

Page 31: 16 장 .  스윙

16장 . 스윙

6 푸시 버튼

31

JButton 클래스 생성자

JButton(Icon i)JButton(String s)JButton(String s, Icon i)

형식

Page 32: 16 장 .  스윙

16장 . 스윙

6 푸시 버튼

32

실습예제JButtonTest1.java

010203040506070809101112131415

import javax.swing.*; import java.awt.*; import java.awt.event.*; class JButtonDemo1 extends JFrame { public JButtonDemo1() { ImageIcon korea = new ImageIcon("korea1.gif"); ImageIcon usa = new ImageIcon("usa.gif"); ImageIcon germany = new ImageIcon("germany.gif"); JButton nat = new JButton(korea); nat.setPressedIcon(usa); nat.setRolloverIcon(germany); Container ct = getContentPane(); ct.add(nat); setTitle("JButton Test1"); setSize(500,400);

한국의 국기를 가지고  JButton 객체 생성

3개의 국기를 가지고  ImageIcon 객체 생성

버튼이 눌러졌을 때 나타낼 이미지 아이콘 설정마우스가 지나갈 때 (rollover) 나타낼 이미지 아이콘 설정

Page 33: 16 장 .  스윙

16장 . 스윙

6 푸시 버튼

33

실습예제JButtonTest1.java

161718192021222324

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }}public class JButtonTest1 { public static void main(String[] args) { new JButtonDemo1(); }}

Page 34: 16 장 .  스윙

16장 . 스윙

6 푸시 버튼

34

프로그램 설명- 06~08 : 3 개의 국기를 가지고 ImageIcon  객체를 생성하였다 . 

- 10~11 :  버튼이 눌러졌을 때 ,  버튼이 지나갈 때를 지정하는 메소드를 사용하여 아이콘을 설정하였다 .  이 프로그램은 이벤트 처리 루틴이 없지만 , AbstractButton  클래스의 메소드를 이용하여 이벤트를 처리한 효과를 나타내고 있다 .

Page 35: 16 장 .  스윙

16장 . 스윙

6 푸시 버튼

35

실습예제JButtonTest2.java

01020304050607080910111213141516171819202122

import javax.swing.*; import java.awt.*; import java.awt.event.*; class JButtonDemo2 extends JFrame implements ActionListener { JTextField jtf; public JButtonDemo2() { jtf = new JTextField(10); ImageIcon 사과  = new ImageIcon("사과 .jpg");

ImageIcon 바나나  = new ImageIcon("바나나 .jpg");

ImageIcon 감  = new ImageIcon("감 .jpg");

ImageIcon 배  = new ImageIcon("배 .jpg");

ImageIcon 포도  = new ImageIcon("포도 .jpg");

JButton jb1 = new JButton("사과 ",사과 );

JButton jb2 = new JButton("바나나 ",바나나 );

JButton jb3 = new JButton("감 ",감 );

JButton jb4 = new JButton("배 ",배 );

JButton jb5 = new JButton("포도 ",포도 ); Container ct = getContentPane(); ct.setLayout(new GridLayout(3,2)); ct.add(jb1); ct.add(jb2); ct.add(jb3);

5개의 과일 사진으로ImageIcon 객체 생성

5개의  ImageIcon 객체를 사용하여 버튼 객체 생성

Page 36: 16 장 .  스윙

16장 . 스윙

6 푸시 버튼

36

실습예제JButtonTest2.java

23242526272829303132333435363738394041424344

ct.add(jb4); ct.add(jb5); ct.add(jtf); jb1.addActionListener(this); jb2.addActionListener(this); jb3.addActionListener(this); jb4.addActionListener(this); jb5.addActionListener(this); setTitle("JButton Test2"); setSize(250,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent ae) { jtf.setText(ae.getActionCommand()); }}public class JButtonTest2 { public static void main(String[] args) { new JButtonDemo2(); }}

각 버튼에 이벤트 리스너 등록

각 버튼이 가진 라벨을 텍스트 필드의내용으로 설정

Page 37: 16 장 .  스윙

16장 . 스윙

6 푸시 버튼

37

프로그램 설명- 08~17 : 5 개의 과일 사진으로 ImageIcon  객체를 생성하고 ,  생성된 ImageIcon  객체로

버튼 객체를 생성하였다 .

- 26~30 :  생성된 각 버튼에 이벤트 리스너를 등록하였다 .

- 37 :  이벤트 처리 루틴에서 이벤트를 발생한 객체가 가진 문자열을 ( 버튼의 이름 )  텍스트 필드의 내용으로 나타내었다 .

Page 38: 16 장 .  스윙

16장 . 스윙

7 체크박스

38

JCheckBox 클래스 생성자

JCheckBox  클래스의 메소드

JCheckBox(Icon i)JCheckBox(Icon i, boolean state)JCheckBox(String s)JCheckBox(String s, boolean state)JCheckBox(String s, Icon i)JCheckBox(String s, Icon i, boolean state)

형식

메소드 설명

void setSelected(boolean state)state를  true로 설정하면 체크박스가 처음 나타날 때 선택된 상태로 나타나게 된다 . 

Page 39: 16 장 .  스윙

16장 . 스윙

7 체크박스

39

실습예제JCheckBoxTest1.java

010203040506070809101112131415161718

import javax.swing.*; import java.awt.*; import java.awt.event.*; class JCheckBoxDemo extends JFrame implements ItemListener { JTextField jtf; public JCheckBoxDemo() { jtf = new JTextField(10); JCheckBox jc1 = new JCheckBox("JSP"); JCheckBox jc2 = new JCheckBox("PHP"); JCheckBox jc3 = new JCheckBox("ASP"); JCheckBox jc4 = new JCheckBox("Servlet"); Container ct = getContentPane(); ct.setLayout(new FlowLayout()); ct.add(jc1); ct.add(jc2); ct.add(jc3); ct.add(jc4); ct.add(jtf);

체크박스의 이벤트 처리를 위해ItemListener 포함

Page 40: 16 장 .  스윙

16장 . 스윙

7 체크박스

40

실습예제JCheckBoxTest1.java

192021222324252627282930313233343536

jc1.addItemListener(this); jc2.addItemListener(this); jc3.addItemListener(this); jc4.addItemListener(this); setTitle("JCheckBox Test1"); setSize(250,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void itemStateChanged(ItemEvent ie) { jtf.setText(((JCheckBox)ie.getItem()).getText()); }} public class JCheckBoxTest1 { public static void main(String[] args) { new JCheckBoxDemo(); }}

이벤트를 발생시킨 객체의 이름을 출력

Page 41: 16 장 .  스윙

16장 . 스윙

7 체크박스

41

프로그램 설명- 05 :  이 프로그램에서는 체크박스 컴포넌트를 사용하여 이벤트를 처리하고 있다 .  체크박스

컴포넌트의 이벤트를 처리하기 위해서는 ItemListener  인터페이스를 포함해야 한다 .  각 컴포넌트에서 발생 가능한 이벤트와 이벤트 처리를 위한 인터페이스의 선정 방법은 15 장에서 설명하였다 . 

- 29 : getItem()  메소드는 이벤트를 발생시킨 객체를 Object 형으로 반환한다 . Object 형의 객체는 하위 클래스의 어떠한 형으로도 형변환이 가능하다 .  여기서는 Object 형의 객체를 JCheckBox 형으로 형변환하였다 . getText()  메소드 (AbstractButton  클래스 메소드 ) 는 해당하는 객체의 문자열을 반환하는 메소드이다 .  반환된 문자열을 텍스트 필드에 출력하고 있다 . 

Page 42: 16 장 .  스윙

16장 . 스윙

7 체크박스

42

Page 43: 16 장 .  스윙

16장 . 스윙

8 라디오 버튼

43

JRadioButton 클래스 생성자

ButtonGroup 클래스 생성자

ButtonGroup  클래스 메소드

JRadioButton(Icon i)JRadioButton(Icon i, boolean state)JRadioButton(String s)JRadioButton(String s, boolean state)JRadioButton(String s, Icon i)JRadioButton(String s, Icon i, boolean state)

형식

메소드 설명

void add() 버튼 그룹에 버튼을 추가한다 . 버튼 그룹에 속한 버튼은 하나만 선택될 수 있다 .

ButtonGroup()형식

Page 44: 16 장 .  스윙

16장 . 스윙

8 라디오 버튼

44

실습예제JRadioButtonTest1.java

0102030405060708091011121314

import javax.swing.*; import java.awt.*; import java.awt.event.*; class JRadioButtonDemo extends JFrame implements ActionListener { JTextField jtf; public JRadioButtonDemo() { jtf = new JTextField(10);

JRadioButton jr1 = new JRadioButton("승마 ");

JRadioButton jr2 = new JRadioButton("골프 ");

JRadioButton jr3 = new JRadioButton("스킨스쿠바 ");

JRadioButton jr4 = new JRadioButton("페러글라이딩 ");

Container ct = getContentPane(); ct.setLayout(new FlowLayout()); ButtonGroup gb = new ButtonGroup();

JRadioButton클래스 객체 생성

버튼 그룹 객체 생성

Page 45: 16 장 .  스윙

16장 . 스윙

8 라디오 버튼

45

실습예제JRadioButtonTest1.java

15161718192021222324252627282930

gb.add(jr1); gb.add(jr2); gb.add(jr3); gb.add(jr4); ct.add(jr1); ct.add(jr2); ct.add(jr3); ct.add(jr4); ct.add(jtf); jr1.addActionListener(this); jr2.addActionListener(this); jr3.addActionListener(this); jr4.addActionListener(this); setTitle("JRadioButtonTest1"); setSize(350,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

각 라디오 버튼을 하나의 그룹으로 만듦

각 버튼에 이벤트리스너 등록

Page 46: 16 장 .  스윙

16장 . 스윙

8 라디오 버튼

46

실습예제JRadioButtonTest1.java

3132333435363738394041

setVisible(true); } public void actionPerformed(ActionEvent ae) { jtf.setText(ae.getActionCommand()); }}public class JRadioButtonTest1 { public static void main(String[] args) { new JRadioButtonDemo(); }}

Page 47: 16 장 .  스윙

16장 . 스윙

8 라디오 버튼

47

프로그램 설명- 08~11 : JRadioButton  클래스로부터 4 개의 객체를 생성한다 .

- 14 :  버튼을 하나의 그룹으로 만들기 위한 ButtonGroup  객체를 생성한다 .

- 15~18 :  버튼 그룹 객체를 이용하여 각각의 라디오 버튼을 하나의 그룹으로 만든다 .

Page 48: 16 장 .  스윙

16장 . 스윙

9 콤보박스

48

JComboBox 클래스 생성자

ComboBox  클래스 메소드

JComboBox()JComboBox(Vector v)

형식

메소드 설명

void addItem(Object obj) 콤보박스에  obj로 지정된 객체 항목을 추가한다 .

Page 49: 16 장 .  스윙

16장 . 스윙

9 콤보박스

49

실습예제JComboBoxTest1.java

0102030405060708091011121314151617

import javax.swing.*; import java.awt.*; import java.awt.event.*; class JComboBoxDemo extends JFrame implements ItemListener { JLabel jl; public JComboBoxDemo() {

jl = new JLabel(new ImageIcon("감 .jpg"));

JComboBox jc = new JComboBox(); Container ct = getContentPane(); ct.setLayout(new FlowLayout()); ct.add(jl);

jc.addItem("감 ");

jc.addItem("바나나 ");

jc.addItem("배 ");

jc.addItem("사과 ");

jc.addItem("앵두 ");

jc.addItem("포도 ");

이벤트 처리를 위해 ItemListener 포함

이미지를 이용하여  JLabel 객체 생성JComboBox 객체 생성

컨터이너에 JLabel 객체 추가

콤보박스 객체에 아이템 추가

Page 50: 16 장 .  스윙

16장 . 스윙

9 콤보박스

50

실습예제JComboBoxTest1.java

1819202122232425262728293031323334

ct.add(jc); jc.addItemListener(this); setTitle("JComboBox Test1"); setSize(350,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void itemStateChanged(ItemEvent ie) { String fruit = (String)ie.getItem(); jl.setIcon(new ImageIcon(fruit+".jpg")); } }public class JComboBoxTest1 { public static void main(String[] args) { new JComboBoxDemo(); }}

컨테이너에 콤보박스 추가

문자열과 연관된 이미지를 이용하여JLabel 객체 설정

getItem() 메소드를 이용하여 문자열 생성

콤보박스에 이벤트 리스너 등록

Page 51: 16 장 .  스윙

16장 . 스윙

9 콤보박스

51

프로그램 설명- 04 : ComboBox  컴포넌트에서 발생되는 이벤트를 처리하기 위해 ItemListener 를

포함하였다 .

- 07 :  이미지 파일을 이용하여 ImageIcon  객체를 생성한 다음 ,  그 객체를 이용하여 Jlabel 

객체를 생성하였다 . 

- 08 : JComboBox  클래스로부터 객체를 생성하였다 . 

- 12~17 :  콤보박스 객체에 아이템을 추가하였다 .  추가된 아이템은 문자열 객체이다 . 

- 18 :  컨테이너에 콤보박스 객체를 추가하였다 .  콤보박스는 6 개의 아이템을 가지고 있다 .

- 19 :  콤보박스에서 발생하는 이벤트를 처리하기 위해 이벤트 리스너를 콤보박스 객체에 등록하였다 . 

- 26 : ItemEvent  클래스의 getItem()  메소드를 이용하여 사용자에 의해 선택된 아이템의 문자열을 가져온다 . 15 장의 ItemEvent  클래스 부분을 참조하기 바란다 . 

- 27 :  문자열을 이용하여 ImageIcon  객체를 생성한 다음 , JLabel  객체의 값으로 설정하여 나타낸다 .

Page 52: 16 장 .  스윙

16장 . 스윙

9 콤보박스

52

Page 53: 16 장 .  스윙

16장 . 스윙

10 리스트

53

JList 클래스 생성자

JList  클래스의 주요 메소드

JList()JList(Object[] items)

형식

메소드 설명int getSelectedIndex() 리스트 중에서 첫 번째 선택된 아이템의 인덱스를 반환

void setSelectedIndex(int index) index로 지정된 아이템을 선택

int[] getSelectedIndices() 리스트 중에서 선택된 모든 아이템의 인덱스를 배열로 반환void setSelectedIndices(int[] in-

dices) indices 배열에서 지정된 아이템을 모두 선택

Object getSelectedValue() 리스트 중에서 첫 번째 선택된 아이템을 Object 객체로 반환

Object[] getSelectedValues() 리스트에서 선택된 모든 아이템을 Object 객체의 배열로 반환 (인덱스 순서 )

Page 54: 16 장 .  스윙

16장 . 스윙

10 리스트

54

실습예제

JListTest1.java

010203040506070809101112131415

import javax.swing.*; import java.awt.*; import javax.swing.event.*; class JListDemo extends JFrame implements ListSelectionListener {

private String[] fruitlist = {"감 ","바나나 ","사과 ","포도 ", "앵두 ","배 "};

private JList jlst = new JList(fruitlist); private ImageIcon[] fruiticons = {

new ImageIcon("감 .jpg"),

new ImageIcon("바나나 .jpg"),

new ImageIcon("사과 .jpg"),

new ImageIcon("포도 .jpg"),

new ImageIcon("앵두 .jpg"),

new ImageIcon("배 .jpg")

}; private JLabel[] jlicon = new JLabel[6];

JList 객체 생성

6개의 과일 사진을 이용하여 ImageIcon  객체  배열  생성 , 이벤트 처리 루틴에서는 선택된 항목의 인덱스를 사용하여 이미지를 나타냄

ListSelectionListener 인터페이스 포함

javax.swing.event.* 패키지 포함

JLabel 객체 배열 선언

Page 55: 16 장 .  스윙

16장 . 스윙

10 리스트

55

실습예제

JListTest1.java

161718192021222324252627282930

public JListDemo() { JPanel p = new JPanel(); p.setLayout(new GridLayout(3,2,5,5)); for (int i = 0 ; i < 6 ; i++ ){ p.add(jlicon[i] = new JLabel()); } Container c = getContentPane(); c.add(jlst, BorderLayout.WEST); c.add(p, BorderLayout.CENTER); jlst.addListSelectionListener(this); setTitle("JList Test1"); setSize(300,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }

패널 객체 생성

패널에 JLabel 객체 배열의 모든 항목 추가

JList에 이벤트 리스너 등록

컨테이너에 JList와 패널 추가

Page 56: 16 장 .  스윙

16장 . 스윙

10 리스트

56

실습예제

JListTest1.java

313233343536373839404142434445

public void valueChanged(ListSelectionEvent lse) { for (int i=1 ; i < 6 ; i++ ){ jlicon[i].setIcon(null); } int[] indices = jlst.getSelectedIndices(); for (int j = 0 ; j < indices.length ; j++ ){ jlicon[j].setIcon(fruiticons[indices[j]]); } }}public class JListTest1 { public static void main(String[] args) { new JListDemo(); }}

모든 아이콘을 null 값으로 초기화

선택된 항목의 인덱스를 정수 배열로 생성

선택된 항목의 인덱스에해당하는 이미지를 나타냄

Page 57: 16 장 .  스윙

16장 . 스윙

10 리스트

57

프로그램 설명- 03 : ListSelectionListener  인터페이스와 ListSelectionEvent  클래스를 사용하기

위해서는 javax.swing.event.*  패키지에 포함시켜야 한다 .  이 두 개의 인터페이스와 클래스는 이 패키지에 선언되어 있기 때문이다 . 

- 04 : JList 에서 발생하는 이벤트를 처리하기 위해서는 ListSelectionListener 

인터페이스를 포함시켜야 한다 . 

- 06 :  문자열 배열을 이용하여 JList  객체를 생성하였다 .

- 07 : ImageIcon  객체 배열 생성

- 15 : 6 개의 요소 ( 각각이 JLabel  객체 ) 를 가지는 JLabel  객체의 배열을 선언하였다 .

- 17 :  선택된 과일 그림을 나타낼 패널 객체를 생성하였다 .

- 18 :  패널에 레이아웃을 3 행 2 열로 설정하였다 .

- 20 :  반복문을 통하여 6 개의 JLabel  객체를 패널에 추가하였다 .  지금 상태는 JLabel 

객체가 아무 값도 가지고 있지 않다 .  이벤트 처리 루틴에서 JLabel  객체에 이미지를 나타내는 setIcon()  메소드를 이용하여 선택된 과일 그림만 나타낼 것이다 . 

- 23~24 :  컨테이너에 JList 와 패널을 왼쪽과 가운데에 추가하였다 .

Page 58: 16 장 .  스윙

16장 . 스윙

10 리스트

58

프로그램 설명- 25 : JList  객체에 이벤트 리스너 (ListSelectionListener) 를 등록하였다 .

- 31 :  이벤트 처리 루틴으로 ListSelectionListener  인터페이스에 선언된 valueChanged(List SelectionEvent lse)  메소드를 오버라이딩하였다 .  일반적으로 이벤트 처리 루틴에서는 매개변수로 받은 객체의 메소드를 이용하여 이벤트를 처리하는데 ,  이 프로그램의 매개변수로 받은 ListSelectionEvent  객체를 사용하지 않는다 .

- 33 :  모든 아이콘을 null  값으로 초기화시킨다 .  즉 사용자가 이 프로그램을 계속 작동시키면 ,  이벤트가 발생할 때마다 선택된 부분을 나타내기 위해서는 전에 나타낸 그림을 초기화시켜야 한다 .

- 35 : getSelectedIndices()  메소드는 JList  클래스에 선언된 메소드이다 .  이 메소드는 선택된 항목의 인덱스를 정수 배열로 반환하는 메소드이다 .  즉 사용자에 의해 선택된 모든 항목의 인덱스가 정수 배열로 반환되게 된다 . 

- 37 :  선택된 항목의 인덱스에 해당하는 이미지를 나타낸다 .  예를 들어 현재 2 개의 항목이 선택되었다면 ,  선택된 항목의 이미지 아이콘이 JLabel[0], JLabel[1] 에 설정되어 나타나게 된다 . 

Page 59: 16 장 .  스윙

16장 . 스윙

10 리스트

59

Page 60: 16 장 .  스윙

16장 . 스윙

11 스크롤 바

60

JScrollPane 클래스 생성자

vsb 와 hsb 는 수직 , 수평 스크롤 바를 설정하기 위해 사용되는 상수로서 다음과 같은 상수가 사용됨- HORIZONTAL_SCROLLBAR_ALWAYS : 항상 수평 스크롤 바를 제공

- HORIZONTAL_SCROLLBAR_AS_NEEDED : 필요한 경우 ( 패널의 크기를 넘어서는 경우 )

에만 수평 스크롤 바 제공

- VERTICAL_SCROLLBAR_ALWAYS : 항상 수직 스크롤 바를 제공

- VERTICAL_SCROLLBARAS_NEEDED : 필요한 경우에만 수직 스크롤 바 제공

JScrollPane(Component comp)JScrollPane(int vsb, int hsb)JScrollPane(Component comp, int vsb, int hsb)

형식

Page 61: 16 장 .  스윙

16장 . 스윙

11 스크롤 바

61

실습예제

JScrollPaneTest1.java

0102030405060708091011121314

import javax.swing.*; import java.awt.*; class JScrollPaneDemo extends JFrame { public JScrollPaneDemo() { JPanel jp = new JPanel(); jp.setLayout(new GridLayout(20,5)); Container ct = getContentPane(); int b = 1; for (int i = 1 ; i <=10 ; i++ ) { for (int j = 1 ; j <=10 ; j++ ) {

jp.add(new JButton(b + "번 "));

b++; } }

JPanel 객체를 생성JPanel 객체를 생성

두 개의 반복문으로  100개의버튼 객체 생성

Page 62: 16 장 .  스윙

16장 . 스윙

11 스크롤 바

62

실습예제

JScrollPaneTest1.java

1516171819202122232425262728293031

int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; JScrollPane jsp = new JScrollPane(jp, v, h); ct.add(jsp, BorderLayout.CENTER); setTitle("JScrollPaneTest1"); setSize(300,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }}public class JScrollPaneTest1 { public static void main(String[] args) { new JScrollPaneDemo(); }}

JScrollPane 객체를생성 (스크롤 바 포함 )

객체 생성을 위한 상숫값 지정

Page 63: 16 장 .  스윙

16장 . 스윙

11 스크롤 바

63

프로그램 설명- 05 : JPanel  객체를 생성하였다 .

- 06 :  생성된 패널 객체에 레이아웃으로 20 행 5 열로 배치하는 레이아웃을 설정하였다 .

- 11 :  두 개의 반복문을 사용하여 패널에 100 개의 버튼 객체를 생성하여 추가하였다 .

- 15~18 :  객체 생성을 위한 상숫값을 지정하였다 .  객체가 패널의 크기보다 크면 자동적으로 스크롤 바가 나타나도록 설정하였다 . 

- 19 : JScrollPane  객체를 생성하였다 .

Page 64: 16 장 .  스윙

16장 . 스윙

11 스크롤 바

64

Page 65: 16 장 .  스윙

16장 . 스윙

12 그룹 홀더

65

JTabbedPane 클래스 생성자

그룹 홀더 메소드

그룹 홀더를 사용하기 위한 일반적인 과정- JTabbedPane 클래스를 이용하여 그룹 홀더 객체를 생성

- 그룹 홀더에 추가할 각각의 홀더 객체를 JPanel 클래스를 이용하여 작성

- 생성된 JPanel 객체를 JTabbedPane 객체에 추가 (addTab() 메소드 이용 )

- 모든 홀더가 완성될 때까지 1-3 번을 반복

- 완성된 그룹 홀더를 프레임에 추가

JTabbedPane()형식

메소드 설명

void addTab(String str,Component comp)

그룹 홀더에 각각의 그룹들을 추가한다 . 위 메소드에서  str은 홀더의 제목을 의미하고 , comp는  Component 객체로서 폴더의 내용을 가지고 있는 객체이다 .

Page 66: 16 장 .  스윙

16장 . 스윙

12 그룹 홀더

66

실습예제JTabbedPaneTest1.java

0102030405060708091011121314151617

import javax.swing.*;import java.awt.*;import java.awt.event.*;class RadioPanel extends JPanel implements ActionListener {

JLabel jl1 = new JLabel("당신의 성별은 ? ");

JLabel jl2 = new JLabel(""); public RadioPanel() {

JRadioButton jrb1 = new JRadioButton("남자 ");

JRadioButton jrb2 = new JRadioButton("여자 ");

add(jl1); add(jl2); add(jrb1); add(jrb2); jrb1.addActionListener(this); jrb2.addActionListener(this); } public void actionPerformed(ActionEvent ae) {

이벤트 처리를 위해 리스너 포함

컴포넌트에 이벤트 리스너 등록

이벤트 처리 루틴

Page 67: 16 장 .  스윙

16장 . 스윙

12 그룹 홀더

67

실습예제JTabbedPaneTest1.java

1819202122232425262728293031323334

String s = ae.getActionCommand(); jl2.setText(s); } }class ComboPanel extends JPanel implements ItemListener {

JLabel jl1 = new JLabel("당신의 혈액형은 ? ");

JLabel jl2 = new JLabel(""); public ComboPanel() { JComboBox jcb = new JComboBox();

jcb.addItem("A형 ");

jcb.addItem("B형 ");

jcb.addItem("AB형 ");

jcb.addItem("O형 ");

add(jl1); add(jl2); add(jcb); jcb.addItemListener(this);

이벤트 처리를 위해 리스너 포함

Page 68: 16 장 .  스윙

16장 . 스윙

12 그룹 홀더

68

실습예제JTabbedPaneTest1.java

3536373839404142434445464748495051

} public void itemStateChanged(ItemEvent ie) { Object s = ie.getItem(); jl2.setText(s.toString()); } }class JTabbedPaneFrame extends JFrame { public JTabbedPaneFrame() { JTabbedPane jtp = new JTabbedPane(); RadioPanel rp = new RadioPanel(); ComboPanel cp = new ComboPanel();

jtp.addTab("성별 ", rp);

jtp.addTab("혈액형 ", cp);

getContentPane().add(jtp); setTitle("JTabbedPaneTest1"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500,150);

이벤트 처리 루틴

성별 패널을 JTabbedPane 객체에 추가

JTabbedPane 객체 생성

혈액형 패널을 JTabbedPane 객체에 추가JTabbedPane 객체를 컨테이너에 추가

Page 69: 16 장 .  스윙

16장 . 스윙

12 그룹 홀더

69

프로그램 설명- 04-40 :  두 개의 패널 객체를 생성하였다 .  패널에서 처리할 이벤트 리스너를 포함하여

작성하였으며 ,  각각의 패널에서 이벤트 처리 루틴을 작성하였다 .

- 43 : JTabbedPane  객체를 생성하였다 .

- 46~47 : addTab()  메소드를 이용하여 두 개의 패널 객체를 JTabbedPane  객체에 추가하였다 . 

- 48 : JTabbedPane  객체를 프레임의 컨테이너 객체에 추가하였다 .

Page 70: 16 장 .  스윙

16장 . 스윙

12 그룹 홀더

70

Page 71: 16 장 .  스윙

16장 . 스윙

13 테이블

71

JTable 클래스 생성자

테이블을 사용하기 위한 절차- JTable 객체를 생성

- 생성된 JTable 객체를 이용하여 JScrollPane 객체를 생성

- 프레임의 컨테이너에 JScrollPane 객체를 추가

JTable(Object data[][], Object colHeads[])형식

Page 72: 16 장 .  스윙

16장 . 스윙

13 테이블

72

실습예제

JTableTest1.java

010203040506070809101112131415

import javax.swing.*; import java.awt.*; class JTableDemo extends JFrame { public JTableDemo() { Container c = getContentPane(); c.setLayout(new BorderLayout());

String[] colHeads = { "학과 ", "학번 ", "이름 " };

Object[][] data = {

{ "IT응용공학전공 ", "201095029", "김지연 " },

{ "컴퓨터응용공학전공 ", "201195007", "김대연 " },

{ "인터넷응용공학전공 ", "201195072", "이현덕 " },

{ "멀티미디어공학전공 ", "201096041", "김기창 " },

{ "IT응용공학전공 ", "201198001", "이명찬 " },

{ "정보통신공학전공 ", "201198074", "강재근 " },

{ "인터넷응용공학전공 ", "201195012", "임자용 " },

테이블의 헤더를 작성테이블의 내용을 작성

Page 73: 16 장 .  스윙

16장 . 스윙

13 테이블

73

실습예제

JTableTest1.java

161718192021222324252627282930

{ "멀티미디어공학전공 ", "201196025", "문정숙 " },

{ "IT응용공학전공 ", "201198016", "하종섭 " },

{ "데이타베이스공학전공 ", "201197011", "안진숙 " },

{ "IT응용공학전공 ", "201198009", "서은실 " },

{ "데이타베이스공학전공 ", "201197008", "장희숙 " },

{ "멀티미디어공학전공 ", "201196033", "장현석 " }

}; JTable table = new JTable(data, colHeads); int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED; int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED; JScrollPane jsp = new JScrollPane(table, v, h); c.add(jsp, BorderLayout.CENTER); setTitle("JTableTest1");

헤더와 내용으로  JTable 객체 생성

JTable 객체를 이용하여  JScrollPane 객체를 생성프레임의 컨테이너에  JScrollPane 객체를 추가

Page 74: 16 장 .  스윙

16장 . 스윙

13 테이블

74

실습예제

JTableTest1.java

31323334353637383940

setSize(400,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }}public class JTableTest1 { public static void main(String[] args) { new JTableDemo(); }}

Page 75: 16 장 .  스윙

16장 . 스윙

13 테이블

75

프로그램 설명- 07 :  테이블의 헤더를 작성하기 위해 문자열의 배열을 생성한다 .

- 08 :  테이블의 내용을 작성하기 위해 Object  클래스의 2 차원 배열을 생성한다 . Object 

클래스의 내용으로는 어떤 형태의 객체도 삽입할 수 있다 .

- 23 :  헤더와 내용으로 JTable  객체를 생성한다 .

- 28 : JTable  객체를 이용하여 JScrollPane  객체를 생성한다 .  즉 테이블에 스크롤을 붙인 형태가 된다 .

- 29 :  프레임의 컨테이너에 JScrollPane  객체를 추가시키면 ,  테이블에 컨테이너에 추가된 형태가 된다 .

Page 76: 16 장 .  스윙

16장 . 스윙

13 테이블

76

Page 77: 16 장 .  스윙

16장 . 스윙

14 메뉴

77

메뉴 관련 클래스- JMenuBar, JMenu, JMenuItem, JCheckBoxMenuItem, JradioButtonMenuItem 등

스윙의 메뉴의 작성 순서- JMenuBar 객체를 생성

- 메뉴바에 나타낼 JMenu 객체를 생성

- 각각의 메뉴에 매달리는 서브 메뉴를 JMenuItem 객체로 생성하여 메뉴에 추가

- 메뉴가 완성될 때까지 2-3 번을 반복

- 메뉴가 완성되면 모든 메뉴를 JMenuBar 에 추가

- setJMenuBar() 메소드를 이용하여 메뉴바를 프레임에 추가

Page 78: 16 장 .  스윙

16장 . 스윙

14 메뉴

78

실습예제JMenuTest1.java

010203040506070809101112131415161718

import javax.swing.*; import java.awt.event.*;import java.awt.*; class JMenuDemo extends JFrame implements ActionListener { JTextField jtf; public JMenuDemo() { Container c = getContentPane(); c.setLayout(new BorderLayout()); JMenuBar jmb = new JMenuBar();

JMenu menu1 = new JMenu("파일 ");

JMenu menu2 = new JMenu("편집 ");

JMenuItem jmi = new JMenuItem("새파일 ");

jmi.addActionListener(this); menu1.add(jmi);

jmi = new JMenuItem("저장하기 ");

jmi.addActionListener(this); menu1.add(jmi); jmb.add(menu1);

이벤트 처리를 위한 리스너 포함

이벤트 처리를 위한 리스너 포함

서브 메뉴를 위한 JMenuItem 객체 생성서브 메뉴에 리스너 등록

서브 메뉴를 메뉴에 추가

메뉴바에 메뉴 추가

각 메뉴 객체 생성

Page 79: 16 장 .  스윙

16장 . 스윙

14 메뉴

79

실습예제JMenuTest1.java

192021222324252627282930313233343536

jmi = new JMenuItem("열기 ");

jmi.addActionListener(this); menu2.add(jmi);

jmi = new JMenuItem("잘라내기 ");

jmi.addActionListener(this); menu2.add(jmi);

jmi = new JMenuItem("복사 ");

jmi.addActionListener(this); menu2.add(jmi);

JCheckBoxMenuItem jcbmi = new JCheckBoxMenuItem("눈금자 ");

jcbmi.addActionListener(this); menu2.add(jcbmi); JRadioButtonMenuItem jrbmb =

new JRadioButtonMenuItem("수정가능상태 ");

jrbmb.addActionListener(this); menu2.add(jrbmb); jmb.add(menu2); setJMenuBar(jmb);

메뉴바에 메뉴 추가

이벤트 처리를 위한 리스너 포함

서브 메뉴 작성 및 추가

메뉴를 프레임에 추가

Page 80: 16 장 .  스윙

16장 . 스윙

14 메뉴

80

실습예제JMenuTest1.java

37383940414243444546474849505152

jtf = new JTextField(); c.add(jtf, BorderLayout.SOUTH); setTitle("JMenuTest1"); setSize(300,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent ae) { jtf.setText(ae.getActionCommand()); }} public class JMenuTest1 { public static void main(String[] args) { new JMenuDemo(); }}

이벤트 결과를 나타낼 텍스트 박스 생성

Page 81: 16 장 .  스윙

16장 . 스윙

14 메뉴

81

프로그램 설명- 04 :  이벤트 처리하기 위해 ActionListener 를 포함시켜 클래스를 작성한다 .

- 09 : JMenuBar  클래스를 이용하여 메뉴바 객체를 생성한다 .

- 10~11 :  메뉴바에 나타낼 각 메뉴 객체를 JMenu  클래스를 이용하여 생성한다 .

- 12~14 :  서브 메뉴를 위한 JMenuItem  객체를 생성하고 ,  그 객체에서의 이벤트를 처리하기 위한 리스너를 등록한다 .  생성된 메뉴 아이템 객체를 10 11 에서 생성된 메뉴 객체에 추가한다 .  위와 같은 부분이 메뉴가 완성될 때까지 반복된다 .

- 18 :  메뉴가 완성되면 메뉴바에 메뉴를 추가한다 .

- 36 :  다 작성된 메뉴바를 프레임에 추가한다 . setJMenuBar()  메소드는 JFrame 

클래스에서 제공되는 메소드이다 .  프레임의 메뉴바를 나타낸다 .  메뉴바는 메뉴를 가지고 있고 ,  메뉴는 메뉴 아이템을 가지고 있어 ,  모든 메뉴가 나타나게 된다 .

- 37 :  메뉴가 선택되었을 때 ( 이벤트 발생 )  그 메뉴를 나타낼 텍스트 박스를 생성하였다 . 

이벤트 처리 루틴에서 사용한다 .

Page 82: 16 장 .  스윙

16장 . 스윙

14 메뉴

82

Page 83: 16 장 .  스윙

스윙 (Swing) 컴포넌트 ① javax.swing 패키지는 가장 상위 클래스로 JComponent 클래스를 가진다 . 그

의미는 JComponent 클래스에 제공되는 모든 메소드를 사용할 수 있다는 의미이다 .

② JComponent 클래스는 java.awt 패키지의 Component, Container 클래스를 상위 클래스로 가진다 .

컴포넌트에서의 이벤트 처리 컴포넌트에서 전형적인 이벤트 처리는 다음과 같은 순서로 이루어진다 .

① 받아들일 이벤트와 연관된 인터페이스를 사용하여 클래스 생성

② GUI 구축을 위한 컴포넌트 객체를 생성

③ 이벤트를 받아들인 컴포넌트 객체 ( 여기서는 버튼 객체 ) 에 리스너를 등록

④ add() 메소드를 사용하여 컴포넌트를 패널 ( 또는 프레임 ) 에 추가

⑤ 이벤트를 처리할 이벤트 처리 루틴 작성 ( 예 : action 이벤트 )

학습정리

83

Page 84: 16 장 .  스윙

스윙 컴포넌트의 사용과 이벤트 처리 ① 다양한 컴포넌트를 사용하여 사용자 인터페이스를 구축할 수 있다 .

② 대부분의 컴포넌트에서 이벤트 처리는 같은 형태로 처리된다 .

③ 이벤트를 처리하기 위해서는 우선 컴포넌트에서 발생하는 이벤트가 어떤 종류가 있는지를 판별해야 하고 , 그 종류의 이벤트를 처리하기 위해서 사용하는 이벤트 리스너를 선택해야 한다 .

④ 이벤트를 처리할 클래스를 작성할 때에는 선별된 이벤트 리스너를 포함하여 작성하여야 하며 , 리스너 인터페이스에서 선언된 모든 메소드를 오버라이딩하여 이벤트 처리 루틴을 작성하여야 한다 .

학습정리

84

Page 85: 16 장 .  스윙

16 장 . 스윙

85

수고하셨습니다 .질문 있습니까 ?