제1장 자바 언어 소개 - Sookmyung Women's...

97
6 6 자바 자바 스윙 스윙 (Swing) (Swing)

Transcript of 제1장 자바 언어 소개 - Sookmyung Women's...

Page 1: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

제제 66장장 자바자바 스윙스윙(Swing)(Swing)

Page 2: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing2스윙스윙 소개소개

JFC (Java Foundation Classes)스윙은 보다 세련된 형태의 GUI를 제공하기 위해서 만들어진 사용자

인터페이스 클래스들 모임

JFC 구성

AWTJava 2DAccessibility드래그-앤-드랍(drag-and-drop)스윙(swing)

Page 3: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing3스윙스윙 소개소개

SwingSet 데모 프로그램

C:\> cd <JDK>\demo\jfc\SwingSet2

C:\> java -jar SwingSet2.jar

Page 4: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing46.1 스윙 컴포넌트

javax.swing.* 패키지에서 SWING과 관련된 모든 컴포넌트들을 제공

javax.swing.Jcomponent : 스윙 컴포넌트의 최상위 클래스

java.lang.Object

스윙의 모든 컴포넌트들

javax.swing.Jcomponent

java.awt.Container

java.awt.Component

Jcomponent클래스의상속관계

Page 5: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing56.1.1 스윙 컴포넌트 상속도

JComponent

AbstractButton

JComboBox

JLabel

JMenuBar

JPanel

JScrollPane

JTabbedPane

JTextComponent

JTable

JTree

Component

JMenuItem

JButton

JToggleButton

JCheckBoxMenuItem

JMenu

JRadioButtonMenuItem

JCheckBox

JRadioButton

JTextArea

JTextField

Container Panel Applet JApplet

스윙 주요 컴포넌트의상속관계

Page 6: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing66.1.2 스윙 컴포넌트 소개 (1)

스윙 관련 주요 클래스의 기능

AbstractButton 버튼과 연관된 클래스들의 상위 추상 클래스

ButtonGroup 버튼을 그룹화하기 위한 클래스

ImageIcon 이미지를 아이콘으로 캡슐화하여 제공하는 클래스

Japplet 애플릿(applet)의 스윙 버전으로 Applet 클래스로부터

상속된 클래스

Jbutton 스윙에서 사용하는 버튼 클래스

JCheckBox 스윙에서 사용하는 체크 박스 클래스

JCheckBoxMenuItem 스윙의 메뉴에서 사용하는 체크박스 클래스

JComboBox 풀다운 리스트를 보여줄 수 있는 콤보 박스 클래스

Jcomponent 모든 스윙 컴포넌트의 상위 클래스

Jlabel 스윙에서 사용하는 라벨 클래스

Jmenu 스윙의 메뉴에서 사용하는 메뉴 클래스

JMenuBar 스윙의 메뉴 바를 만들기 위한 클래스

JMenuItem 스윙에서 사용하는 메뉴관련 클래스의 상위 클래스

Jpanel 스윙에서 사용하는 판넬 클래스

Page 7: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing76.1.2 스윙 컴포넌트 소개 (2)

스윙 관련 주요 클래스의 기능

JRadioButton 스윙에서 사용하는 라디오버튼 클래스

JRadioButtonMenuItem 스윙의 메뉴에서 사용하는 라디오버튼 클래스

JScrollPane 스크롤 윈도우를 나타내는 클래스

JTabbedPane 그룹을 홀더 형태로 제공하는 윈도우를 나타내는 클래스

Jtable 데이터를 행과 열로 나타내는 클래스

JTextArea 스윙에서 사용하는 텍스트 에리어 클래스

JTextComponent 스윙에서 사용하는 텍스트 관련 클래스들의 상위 클래스

JTextFeild 스윙에서 사용하는 텍스트 필드 클래스

JToggleButton JCheckBox 클래스와 JRadioButton 클래스의 상위 클래스

Jtree 트리 형태를 나타내는 클래스

Page 8: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing86.1.3 6.1.3 스윙스윙 컴포넌트들컴포넌트들(1/4)(1/4)

Page 9: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing96.1.3 6.1.3 스윙스윙 컴포넌트들컴포넌트들 (2/4)(2/4)

Page 10: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing106.1.3 6.1.3 스윙스윙 컴포넌트들컴포넌트들 (3/4)(3/4)

Page 11: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing116.1.3 6.1.3 스윙스윙 컴포넌트들컴포넌트들 (4/4)(4/4)

Page 12: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing126.2 6.2 스윙스윙 컴포넌트컴포넌트

6.2.1 Jcomponent대부분의 스윙 클래스들은 JComponent클래스로부터 상속받는다.

스윙에서 톱 레벨(top level) 컨테이너

예: JFrame, JApplet, JDialog는 JComponent클래스로부터 상속받지 않는다.

Page 13: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing136.2.2 6.2.2 JFrameJFrame (1/3)(1/3)

6.2.2 JFrame

스윙 프레임은 JFrame 클래스

Jframe가 AWT의 Frame 클래스와 다른점

컴포넌트를 붙일 때는 getContentPane() 함수를

호출해서 붙인다.

예예::Jframe frame = new JFrame();frame.getContentPane().setLayout(newFlowLayout());frame.getContentPane().add(childComponent);

Page 14: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing146.2.2 6.2.2 JFrameJFrame (2/3)(2/3)

JFrame 생성자

JFrame() JFrame(GraphicsConfiguration gc) JFrame(String title) JFrame(String title, GraphicsConfiguration gc)

JFrame의 메소드들

Container getContentPane()Component getGlassPane() JMenuBar getJMenuBar() void remove(Component comp) void setContentPane(Container contentPane) void setJMenuBar(JMenuBar menubar) void setLayout(LayoutManager manager)……etc.

Page 15: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing156.2.2 6.2.2 JFrameJFrame (3/3)(3/3)

예제: JFrameTest.java1 import javax.swing.*;

2

3 public class JFrameTest extends JFrame {

5 public JFrameTest() {

6 super("스윙 JFrame 테스트");

7 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

8 setSize(300, 200);

9 setVisible(true);

10 }

11

12 public static void main(String args[]) {

13 JFrame jf = new JFrameTest();

…..

Page 16: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing166.2.3 6.2.3 JlabelJlabel & & JButtonJButton (1/9)(1/9)

6.2.3 JLabel 과 Jbutton1. JLabel

JLabel은 텍스트와 이미지(아이콘)를 출력할 수 있는 스윙 컴포넌트

생성자

JLabel(String text, Icon icon, int horizontalAlignment)JLabel(String text, int horizontalAlignment) JLabel(String text)JLabel(Icon image, int horizontalAlignment)JLabel(Icon image)JLabel()horizontalAlignment은 라벨의 위치를 지정하는 부분으로 LEFT, CENTER, RIGHT,LEADING,TRAILING 값 중에서 하나를 선택할 수 있다.디폴트로는 CENTER 값을 갖는다.

레벨의 텍스트 내용을 알아보거나 값을 설정하는 메소드

String getText() void setText(java.lang.String text)

Page 17: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing176.2.3 6.2.3 JlabelJlabel & & JButtonJButton (2/9)(2/9)

라벨 텍스트의 폰트 지정을 위한 메소드

void setFont(java.awt.Font font)

라벨의 아이콘을 위한 메소드

Icon getIcon() void setIcon(Icon icon)

수직 및 수평 방향의 위치를 위한 메소드

int getHorizontalAlignment()void setHorizontalAlignment(int alignment)int getVerticalAlignment() void setVerticalAlignment(int alignment)

setHorizontal Alignment() 메소드에서는

LEFT, CENTER, RIGHT 값 중에 하나를 사용

setVerticalAlignment() 메소드에서는

TOP, CENTER, BOTTOM 중에 하나를 사용

Page 18: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing186.2.3 6.2.3 JlabelJlabel & & JButtonJButton (3/9)(3/9)

라벨 텍스트의 위치 지정을 위한 메소드

int getHorizontalTextPosition()

void setHorizontalTextPosition(int textPosition)

int getVerticalTextPosition()

void setVerticalTextPosition(int textPosition)setHorizontalTextPosition() 메소드에서는

LEFT, CENTER, RIGHT 값 중에 하나를 사용

setVerticalTextPosition() 메소드에서는

TOP, CENTER, BOTTOM 중에 하나를 사용

모든 스윙 GUI 컴포넌트들은 JComponent 클래스로부터 상속

JComponent는 또한 java.awt.Container 클래스로부터 상속받았으므로

JLabel이나 JButton 등의 스윙 컴포넌트는 자바 AWT의 GUI 컴포넌트를

포함할 수 있다.

Page 19: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing196.2.3 6.2.3 JlabelJlabel & & JButtonJButton (4/9)(4/9)

2. AbstractButtonAbstractButton 클래스는 버튼 클래스에서 필요한 기본적인 메소드들을

정의

AbstractButton 클래스로부터 상속받은 클래스는 JButton , JCheckBox,

JRadioButton, JMenuItem, JMenu, JToggleButton 등

o 버튼 상속관계

Page 20: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing206.2.3 6.2.3 JlabelJlabel & & JButtonJButton (5/9)(5/9)

AbstractButton 클래스의 중요한 메소드들

버튼의 디폴트 아이콘을 설정 또는 아이콘을 알아보는 메소드. Icon getIcon() - 디폴트 아이콘 얻음. void setIcon(Icon defaultIcon) - 디폴트 아이콘 설정.

버튼의 텍스트를 알아보거나 값을 설정하는 메소드

String getText() - 버튼의 텍스트를 리턴한다. void setText(String text) - 버튼의 텍스트를 설정한다.

버튼의 위치에 관한 메소드를. int getHorizontalAlignment()void setHorizontalAlignment(int alignment)int getVerticalAlignment()void setVerticalAlignment(int alignment)

o 수평 방면 alignment 값으로 LEFT, CENTER, RIGHT, LEADING, TRAILING 변수

사용 가능. 수직 방면은 TOP, CENTER, BOTTOM 변수 사용 가능.

Page 21: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing216.2.3 6.2.3 JlabelJlabel & & JButtonJButton (6/9)(6/9)

버튼 텍스트 위치를 아이콘에 상대적으로 결정하는 메소드들.

int getHorizontalTextPosition()

void setHorizontalTextPosition(int textPosition)

int getVerticalTextPosition()

void setVerticalTextPosition(int textPosition)

버튼의 상태에 따라 아이콘이 변경되도록 설정하는 메소드들.

void setDisabledIcon(Icon disabledIcon)

- 비 활성화된 상태에 보여질 아이콘을 설정.

void setPressedIcon(Icon pressedIcon)

- 버튼이 눌려졌을 때 보여질 아이콘을 설정한다.

void setRolloverIcon(Icon rolloverIcon)

- 버튼 위에 마우스가 놓여졌을 때 보여질 아이콘을 설정한다.

void setDisabledSelectedIcon(Icon disabledSelectedIcon)

- 버튼이 눌려진 상태에서 비 활성화된 상태에서 보여질 아이콘을 설정한다.

키보드를 이용해서 단축키(mnemonic)를 설정하는 메소드

void setMnemonic(char mnemonic) - 단축키 문자를 설정.

Page 22: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing226.2.3 6.2.3 JlabelJlabel & & JButtonJButton (7/9)(7/9)

3. JButtonJButton 컴포넌트는 AbstractButton 클래스로부터 상속

AbstractButton 클래스는 버튼 클래스에서 필요한 기본적인 메소드들을

정의

AbstractButton 클래스로부터 상속받은 클래스는 JButton 이외에

JCheckBox, JRadioButton, JMenuItem, JMenu, JToggleButton 등이

있다.

생성자

JButton() JButton(Icon icon) JButton(java.lang.String text) JButton(java.lang.String text, Icon icon)

JButton의 대부분 메소드들은 AbstractButton 클래스에 정의된 것들이다.

Page 23: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing236.2.3 6.2.3 JlabelJlabel & & JButtonJButton (8/9)(8/9)

예제: JLabelButton.java- 실습 (대학 로고, label, button)14 ImageIcon logo = new ImageIcon("logo.gif");15 label=new JLabel("대학교 로고", logo, JLabel.RIGHT);16 label.setFont(new Font("굴림체", Font.PLAIN, 20));17 getContentPane().add(label);1819 textB = new JButton("버튼" );20 textB.setFont(new Font("굴림체", Font.BOLD, 20));21 getContentPane().add(textB);2223 ImageIcon project = new ImageIcon("chart.gif");24 iconB = new JButton("", project);25 getContentPane().add(iconB);26 setDefaultCloseOperation(EXIT_ON_CLOSE);

……

Page 24: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing246.2.3 6.2.3 JlabelJlabel & & JButtonJButton (9/9)(9/9)

4. 툴팁(tooltip)스윙 컴포넌트에 "Tip"을 화면에 보여주기 위해서

JToolTip 컴포넌트가 사용

JToolTip은 생성자를 이용해서 생성할 수도 있지만

보통은 JComponent 클래스에서 제공하는

setToolTipText(String text) 메소드를 이용

예 :

JButton chart = new JButton("Chart");

chart.setToolTipText("PIE chart");

툴팁의 내용은 “<html>"로 시작하는 경우에 간단한

HTML 태그들을 사용할 수 있다.

예:

rollover.setToolTipText("<html><b>안녕</b><br>!!!</html>");

Page 25: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing256.2.4 6.2.4 JCheckBoxJCheckBox, , JRadioButtonJRadioButton, , JToggleButtonJToggleButton (1/5)(1/5)

6.2.4 JCheckBox, JRadioButton, JToggleButton1. JCheckBox

AWT의 체크박스와 유사.스윙에서는 라디오버튼을 위해서 JRadioButton 클래스를 따로 정의

생성자

JCheckBox(Icon icon)JCheckBox(Icon icon, boolean selected) JCheckBox(String text)JCheckBox(String text, boolean selected)JCheckBox(String text, Icon icon)JCheckBox(String text, Icon icon, boolean selected)

selected 부분은 체크박스가 초기에 선택되어질 것인가 여부를기술하는 부울린(boolean) 값이다.

Page 26: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing266.2.4 6.2.4 JCheckBoxJCheckBox, , JRadioButtonJRadioButton, , JToggleButtonJToggleButton (2/5)(2/5)

체크박스도 JButton 클래스와 마찬가지로 AbstractButton 클래스로부터

상속.

체크박스는 디폴트 아이콘 이미지를 갖는데 다음 메소드들 이용하여

프로그래머가 아이콘을 지정할 수도 있다.void setIcon(Icon defaultIcon) void setSelectedIcon(Icon selectedIcon)

체크박스의 상태를 알아보거나 상태를 설정하는 메소드

boolean isSelected() void setSelected(boolean b)

이외의 메소드들은 JButton 클래스에서 설명한 내용과 동일하다.

Page 27: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing276.2.4 6.2.4 JCheckBoxJCheckBox, , JRadioButtonJRadioButton, , JToggleButtonJToggleButton (3/5)(3/5)

2. JRadioButtonCheckboxGroup과 유사하게 ButtonGroup 클래스를 두어서

라디오버튼들을 하나의 그룹으로 설정할 수 있도록 하였다.

생성자

JRadioButton(Icon icon) JRadioButton(Icon icon, boolean selected)JRadioButton(String text)JRadioButton(String text, boolean selected) JRadioButton(String text, Icon icon) JRadioButton(String text, Icon icon, boolean selected)

라디오 버튼도 AbstractButton 클래스로부터 상속받았기 때문에

AbstractButton의 메소드를 사용한다.

Page 28: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing286.2.4 6.2.4 JCheckBoxJCheckBox, , JRadioButtonJRadioButton, , JToggleButtonJToggleButton (4/5)(4/5)

3. JToggleButtonJToggleButton은 자바 AWT에서는 지원되지 않는 클래스로서

JCheckBox와 JRadio Button의 부모 클래스이다.JToggleButton은 On/Off 상태를 가지면서, 처음에 버튼을 누르면 눌려진 상태를 유지한다.

생성자

JToggleButton() JToggleButton(Icon icon) JToggleButton(Icon icon, boolean selected) JToggleButton(String text) JToggleButton(String text, boolean selected) JToggleButton(String text, Icon icon) JToggleButton(String text, Icon icon, boolean selected)

Page 29: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing296.2.4 6.2.4 JCheckBoxJCheckBox, , JRadioButtonJRadioButton, , JToggleButtonJToggleButton (5/5)(5/5)

예제: BoxesTest.java……11 getContentPane().setLayout(new GridLayout(0, 3));12 joy = new JCheckBox("Joy Stick", true);13 key = new JCheckBox("Keybord", false);14 mouse = new JCheckBox("Mouse", false);1516 ButtonGroup bg = new ButtonGroup();17 single = new JRadioButton("Single", true);18 married = new JRadioButton("Married", false);19 divorced = new JRadioButton("Divorced", false);20 bg.add(single);21 bg.add(married);22 bg.add(divorced);24 onoff = new JToggleButton("On/Off");

Page 30: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing306.2.5 6.2.5 JSpinner(1/2)

Spinner

마우스 클릭으로 여러 개의 값들 중에서 하나를

선택할 수 있는 GUI 컴포넌트

형태

스피너 사용 예SpinnerNumberModel scoreModel = new

SpinnerNumberModel(0,0,100,5);

JSpinner(scoreModel);

Page 31: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing316.2.5 6.2.5 JSpinner(2/2)

예제: SpinnerTest.java

10 SpinnerNumberModel scoreModel =

11 new SpinnerNumberModel(0, 0, 100, 5);

12 score = new JSpinner(scoreModel);

16 String colors[] = { "빨강", "노랑", "파랑" };

17 SpinnerListModel colorModel = new SpinnerListModel(colors);

18 color = new JSpinner(colorModel);

22 SpinnerDateModel dateModel = new SpinnerDateModel();

23 date = new JSpinner(dateModel);

Page 32: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing326.2.6 6.2.6 Jlist and JComboBox(1/11)

6.2.6 JList 와 JComboBox1. JList와 DefaultListModel

JList는 AWT의 List 클래스와 유사

JList는 자동적으로 스크롤바를 만들어주지 않는다.리스트에 스크롤 기능을 추가하기 위해서는 JScrollPane 클래스를 이용해야 한다.

예 :JList list = new JList(stringArray);ScrollPane pane = new ScrollPane();pane.add (list);

생성자

JList(ListModel dataModel) JList(Object[] listData)JList(Vector listData)JList()

Page 33: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing336.2.6 6.2.6 Jlist and JComboBox(2/11)

리스트(JList)

여러 개의 값들 중에서 하나 혹은 여러 개를

선택할 수 있는 GUI 컴포넌트

형태

리스트 사용 예

String [] data = { "ABC", "DEF", "GHI" };

JList list = new JList(data);

JScrollPane pane = new JScrollPane(list);

Page 34: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing346.2.6 6.2.6 Jlist and JComboBox(3/11)

리스트 모델의 상속 관계

Page 35: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing356.2.6 6.2.6 Jlist and JComboBox(4/11)

선택된 아이템을 얻어올 수 있는 메소드

int getSelectedIndex()

int[] getSelectedIndices()

Object getSelectedValue()

Object[] getSelectedValues() ListModel

JList 에 추가 삭제 하기 위해 ListModel 인터페이스를 이용

예: ListModel dm = (ListModel) list.getModel();

원소를 추가하기 위한 메소드들

void add(int index, Object element) - element를 index 위치에 삽입한다.

void addElement(Object obj) - obj를 리스트의 끝 부분에 추가한다.

Page 36: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing366.2.6 6.2.6 Jlist and JComboBox(5/11)

DefaultListModelListModel 인터페이스를 임플리멘츠함.주어진 위치의 원소를 얻어오는 메소드들

Object get(int index) - index번째의 원소를 얻어온다.

Object getElementAt(int index) - index번째의 원소를 얻어온다.

Object elementAt(int index) - index번째의 원소를 얻어온다.

원소를 삭제하기 위한 메소드들

Object remove(int index) - index번째의 원소를 삭제한다.

void removeAllElements() - 모든 원소를 삭제한다.

boolean removeElement(Object obj) - 주어진 원소를 삭제한다.

기타 메소드들

int size() - 원소의 수를 얻어온다.

boolean contains(Object elem) - elem이 컴포넌트에 포함되어 있는지

알아본다.

Enumeration elements() - 원소 리스트들을 Enumeration 타입을 리턴한다.

Page 37: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing376.2.6 6.2.6 Jlist and JComboBox(6/11)

2. JComboBox 와 DefaultComboBoxModel콤보박스는 자바 AWT의 Choice와 유사하다.

생성자

JComboBox(ComboBoxModel aModel)

JComboBox(Object[] items)

JComboBox(Vector items)

JComboBox()

Page 38: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing386.2.6 6.2.6 Jlist and JComboBox(7/11)

콤보 박스

여러 개의 값들 중에서 하나만 선택할 수 있는

GUI 컴포넌트

드랍 다운 메뉴라고도 함

형태

콤보 박스 사용 예

String[] data = { "ab", "cde" };

JComboBox c = new JComboBox(data);

JComboBox c = new JComboBox();

c.addItem("ab");

c.addItem("cde");

Page 39: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing396.2.6 6.2.6 Jlist and JComboBox(8/11)

콤보박스에 아이템을 추가하기 위한 메소드

void addItem(Object anObject)

특정 위치에 있는 아이템을 얻어오기 위한 메소드

Object getItemAt(int index)

아이템의 개수를 얻어오기 위한 메소드

int getItemCount()

현재 콤보박스에서 선택된 아이템의 인덱스나 아이템을 얻어오기 위한

메소드

int getSelectedIndex()

Object getSelectedItem()

Page 40: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing406.2.6 6.2.6 Jlist and JComboBox(9/11)

아이템을 특정 위치에 삽입하기 위한 메소드

void insertItemAt(Object anObject, int index)

콤보박스에 있는 아이템을 삭제하기 위해서는 다음 메소드

void removeAllItems()

모든 아이템을 삭제

void removeItemAt(int anIndex)

특정 위치의 아이템만 삭제

콤보 박스 모델(ComboBoxModel)

콤보 박스에서 사용되는 모델은 ComboBoxModel 인터페이스임.

콤보 박스 모델을 얻기 위해한 예:

예: ComboBoxModel dm = (ComboBoxModel) combo.getModel();

Page 41: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing416.2.6 6.2.6 Jlist and JComboBox(10/11)

ComboBoxModel이 제공하는 데이터 저장 및 접근하는 메소드들.콤보 박스에 아이템을 추가 또는 삭제하기 위한 메소드들

void addElement(Object anObject) - 아이템을 추가한다.

void insertElementAt(Object anObject, int index)

- index번째에 anObject 객체를 삽입한다.

void removeAllElements() - 모든 아이템들을 삭제한다.

void removeElement(Object anObject) - anObject 아이템을 삭제한다.

void removeElementAt(int index) - index번째의 아이템을 삭제한다.

아이템을 찾는 메소드들

Object getElementAt(int index) - index번째의 아이템을 리턴한다.

int getIndexOf(Object anObject) - anObject 객체의 인덱스를 리턴한다.

선택된 아이템 얻는 메소드

Object getSelectedItem() - 선택된 아이템을 리턴한다.

원소의 개수를 알아보는 메소드

int getSize() - 원소의 수를 리턴한다.

Page 42: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing426.2.6 6.2.6 Jlist and JComboBox(11/11)

예제: JListComboBox.java/JListComboBox.java5 JList fruits;6 JComboBox colors;8 public JListComboBox() {9 super("스윙 리스트와 콤보박스");10 getContentPane().setLayout(new FlowLayout());1112 String items[] = {"apple", "orange", "banana", "pear"};13 fruits = new JList(items);14 fruits.setVisibleRowCount(3);15 JScrollPane sp = new JScrollPane(fruits);1617 colors = new JComboBox();18 colors.addItem("white");19 colors.addItem("blue");20 colors.addItem("green");

Page 43: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing436.2.7 JTextComponent (1/10)

6.2.7 텍스트컴포넌트

1. JTextComponent텍스트 관련 컴포넌트들은 JTextComponent 클래스로부터 상속받음.

용도에 따라 텍스트 컨트롤, 단순 텍스트, 스타일을 가지는 텍스트

영역의 세 가지 종류로 구분.

텍스트 컨트롤은 한 줄을 입력할 수 있는 JTextField, JPasswordField클래스들.단순 텍스트 영역은 여러 줄을 입력하지만, 한 가지 폰트로 동일한 스타일의문자열만 사용. JTextArea 클래스스타일을 가지는 텍스트 영역은 여러 폰트를 사용해서 문자열들을 화면에보여줄 수 있는 JEditorPane, JTextPane 클래스들.

JTextComponent는 텍스트를 처리할 수 있는 기본적인 기능들 제공.

Document 클래스는 텍스트에서 데이터를 가지고 있는 모델.

텍스트는 캐릿 모양을 변경할 수 있고, 텍스트를 처리하기에

필요한 기능들을 제공한다.

Page 44: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing446.2.7 JTextComponent (2/10)

스윙 텍스트 컴포넌트 상속 관계

Page 45: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing456.2.7 JTextComponent (3/10)

텍스트 컴포넌트

JTextField한 줄 입력

JPasswordField암호 한 줄 입력

JFormattedTextField포맷이 텍스트의 한 줄 입력

JTextArea여러 줄의 텍스트

Page 46: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing466.2.7 JTextComponent (4/10)

JTextComponent는 복사, 잘라내기, 붙이기를 위한 메소드들.void copy() - 현재 선택된 영역을 시스템 클립보드로 복사한다.void cut() - 현재 선택된 영역을 잘나내고, 시스템 클립보드로 옮긴다.void paste() - 시스템 클립보드에 있는 데이터를 텍스트 영역에 붙인다.

캐릿 형태를 알아보거나, 변경하기 위한 메소드들. Caret getCaret() - 현재 설정된 캐릿을 리턴한다. Color getCaretColor() - 캐릿의 색을 리턴한다.int getCaretPosition() - 캐릿의 위치를 리턴한다. void setCaret(Caret c) - 캐릿을 지정한다.void setCaretColor(Color c) - 캐릿의 색을 지정한다.void setCaretPosition(int position) - 캐릿의 위치를 지정한다.

Page 47: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing476.2.7 JTextComponent (5/10)

텍스트에서 선택된 부분을 알아보기 위한 메소드들.String getSelectedText() - 선택된 부분의 문자열을 리턴한다. Color getSelectedTextColor() - 선택된 부분의 글자색을 리턴한다. int getSelectionStart() - 선택된 부분의 처음 위치를 리턴한다.int getSelectionEnd() - 선택된 부분의 끝 위치를 리턴한다.void select(int selectionStart, int selectionEnd) - 지정된 영역을 선택한다.void selectAll() - 텍스트의 모든 데이터를 선택한다.void replaceSelection(String content) - 선택된 부분을 content로 변경한다.

텍스트 데이터를 얻거나 값을 설정하기 위한 메소드들.String getText() - 텍스트 컴포넌트에 있는 텍스트 데이터를 리턴한다.String getText(int offs, int len)

- off만큼 떨어진 곳에서 len 길이의 텍스트 데이터를 리턴한다.void setText(String t) - 문자열 t를 텍스트 데이터로 설정한다.void setEditable(boolean b)

- 사용자가 편집할 수 있도록(true)/하지 못하도록(false) 설정한다.

Page 48: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing486.2.7 JTextComponent (6/10)

2. JTextFieldJTextField는 TextField처럼 한 줄의 문자열을 입력할 수 있는 클래스.

생성자

JTextField() JTextField(String text) JTextField(int columns)JTextField(String text, int columns) JTextField(Document doc, String text, int columns)

Page 49: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing496.2.7 JTextComponent (7/10)

3. JPasswordFieldJPasswordField 클래스는 텍스트 내용을 화면에 '*'로 표시하는

JTextField 클래스의 일종이다.

생성자

JPasswordField() JPasswordField(String text) JPasswordField(int columns) JPasswordField(String text, int columns)JPasswordField(Document doc, String txt, int columns)

화면에 나타나는 문자를 지정하거나 알아볼 수 있는 메소드들.

void setEchoChar(char c) - 화면에 보여줄 문자를 지정.

char getEchoChar() - 현재 화면에 보여지는 문자를 알아봄.

Page 50: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing506.2.7 JTextComponent (8/10)

4. JTextAreaJTextArea와 JTextField는 JTextComponent 클래스로부터 상속받는데, JText Component 클래스는 편집기에서 사용되는 기본적인 기능들을

제공하고 있다.

생성자

JTextArea() JTextArea(java.lang.String text) JTextArea(int rows, int columns) JTextArea(String text, int rows, int columns) JTextArea(Document doc) JTextArea(Document doc, String text, int rows, int columns)

Page 51: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing516.2.7 JTextComponent (9/10)

JTextArea가지는 메소드들.void append(String str) - 문자열을 끝에 추가.int getLineCount() - 줄 수를 리턴.void insert(String str, int pos) - 문자열을 pos 위치에 삽입. void replaceRange(String str, int start, int end)

- start와 end 사이의 문자열을 str 문자열로 변경. void setTabSize(int size) - 탭문자의 크기를 지정.

Page 52: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing526.2.7 JTextComponent (10/10)

예제: SwingText.java /SwingText1.java5 JTextField field;6 JPasswordField passwd;7 JTextArea area;……13 area = new JTextArea();14 JScrollPane sp = new JScrollPane(area);1516 field = new JTextField(10);17 passwd = new JPasswordField(10);……30 public Insets getInsets() {31 return new Insets(30, 10, 10, 10);32 }

Page 53: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing536.2.8 JTabbedPane(1/5)

6.2.8 JTabbedPaneJTabbedPane 클래스를 이용하면 여러 개의 컴포넌트(보통 JPanel)가공간을 공유할 수 있다.사용자는 탭을 선택함으로서 원하는 컴포넌트를 볼 수 있다.JTabbedPane 클래스는 사용자가 선택할 수 있는 탭이 있다는 것을

제외하면 AWT의 CardLayout과 유사하다고 볼 수 있다.

생성자

JTabbedPane() JTabbedPane(int tabPlacement)

tabPlacement는 탭의 위치를 결정할 수 있는데, TOP, BOTTOM, LEFT, RIGHT 중에 하나를 값으로 가질 수

있다.

Page 54: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing546.2.8 JTabbedPane(2/5)

탭팬

탭을 이용해서 공간을 효율적으로 사용하기

위한 GUI 컴포넌트

형태

탭팬 사용 예

JTabbedPane pane = JTabbedPane();

pane.addTab(“One”, icon, panel);

Page 55: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing556.2.8 JTabbedPane(3/5)

JTabbedPane에 컴포넌트를 붙이기 위한 메소드

void addTab(String title, Icon icon, Component component, String tip)void addTab(String title, Icon icon, Component component) void addTab(String title, Component component) void insertTab(String title, Icon icon, Component component, String

tip, int index)

컴포넌트를 제거하기 위한 메소드들

void remove(Component component) void removeAll() void removeTabAt(int index)

JTabbedPane에 추가되는 컴포넌트들은 추가되는 순서에 따라

인덱스로 나타낼 수 있는데, 인덱스는 0부터 시작된다.

Page 56: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing566.2.8 JTabbedPane(4/5)

그 외에 다른 메소드들

int getSelectedIndex() - 선택된 탭팬의 인덱스 값을 리턴한다.

int getTabCount() - 탭의 수를 리턴한다.

void setIconAt(int index, Icon icon) - index번째의 탭의 아이콘을

설정한다.

Icon getIconAt(int index) - index번째 탭의 아아콘을 리턴한다.

예제 : TabPaneDemo.java5 JTabbedPane tabpane;

6

7 public TabPaneDemo(){

8 super("탭팬 테스트");

9 tabpane = new JTabbedPane();

Page 57: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing576.2.8 JTabbedPane(5/5)

11 JPanel one = new JPanel();

12 JPanel two = new JPanel();

13 JPanel three = new JPanel();

……

19 tabpane.addTab("One", one);

20 tabpane.addTab("Two", two);

21 tabpane.addTab("Three", three);

22

23 getContentPane().add(tabpane, BorderLayout.CENTER);

……

Page 58: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing586.2.9 JTable (1/6)

6.2.9. JTableJTable은 테이블 형태의 자료를 보여주고 편집도 가능한 스윙 컴포넌트

생성자

JTable() JTable(TableModel dm) JTable(TableModel dm, TableColumnModel cm)JTable(TableModel dm, TableColumnModel cm,

ListSelectionModel sm)JTable(int numRows, int numColumns)JTable(Vector rowData, Vector columnNames) JTable(java.lang.Object[][] rowData, Object[] columnNames)

Page 59: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing596.2.9 JTable (2/6)

테이블

많은 레코드 데이터를 표현하기 위한 GUI 컴포넌트

형태

테이블 사용 예

String head[] = { "A", "B" };

String data[][] = { {"a", "b"} };

JTable table = new JTable(data, head);

Page 60: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing606.2.9 JTable (3/6)

DefaultTableModelTableModel 인터페이스를 임프리멘츠한 클래스.

테이블에 행과 열을 추가하는 메소드들.void addColumn(Object columnName) - 열 이름을 이용해서 한 열을 추가. void addColumn(Object columnName, Object[] columnData)

- 열 이름과 데이터를 이용해서 한 열을 추가한다. void addColumn(Object columnName, Vector columnData)

- 열 이름과 데이터를 이용해서 한 열을 추가한다. void addRow(Object[] rowData) - 한 줄을 추가한다.void addRow(Vector rowData) - 한 줄을 추가한다.

Page 61: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing616.2.9 JTable (4/6)

열의 수와 이름을 알아보는 메소드

int getColumnCount() - 열의 수를 리턴한다.String getColumnName(int column) - 열의 이름을 리턴한다.

주어진 행과 열의 값을 알아보고, 값을 설정하는 메소드

Object getValueAt(int row, int column) - 테이블에서 주어진 행과

열에 해당되는 값을 리턴한다.void setValueAt(Object aValue, int row, int column) – 테이블에서

주어진 행과 열에 값을 설정한다.

행을 추가/삭제하기 위한 메소드들

void insertRow(int row, Object[] rowData) - row번째에 행을 추가한다.void insertRow(int row, Vector rowData) - row번째에 행을 추가한다.void removeRow(int row) - row번째 행을 제거한다.

Page 62: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing626.2.9 JTable (5/6)

예제 : TableDemo.java8 String fieldName[] = {

9 "<html>이름<br>학기순</html>",

10 "전화번호",

11 "E-Mail"

12 };

14 String data[][] = {15 { “윤용익", "000-0000", “[email protected]"},

16 { "윤용익2", "111-1111", “[email protected]"},

17 { "홍길동", "222-2222", gdhong@email}

18 } ;

20 JTable table = new JTable(data, fieldName);

21 JScrollPane sp = new JScrollPane(table);

Page 63: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing636.2.9 JTable (1/6)

예제: TableDemo.java(참고)

38 public void mousePressed(MouseEvent e) {

39 int row = table.getSelectedRow();

40 int col = table.getSelectedColumn();

41 if(row == -1 || col == -1)

42 return;

43

44 System.out.print("<" + row + "," + col + "> - ");

45 System.out.println(data[row][col]);

46 }

Page 64: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing646.2.10 JTree (1/7)

6.2.10. 트리 (JTree)JTree는 계층적인 자료를 보여주기 위한 스윙 컴포넌트

트리는 하나의 루트 노드를 가지고 여러 개의 서브 노드들을 갖는다.서브노드들 중에서 자식노드가 없는 노드를 리프(leaf) 노드라고한다.리프 노드가 아닌 노드들은 숫자에 상관없이 여러 개의 자식 노드들을 가질

수 있고 마우스로 클릭하는 경우에 확장된다.생성자

JTree() JTree(Object[] value) JTree(Vector value) JTree(Hashtable value) JTree(TreeNode root) JTree(TreeNode root, boolean asksAllowsChildren) JTree(TreeModel newModel)

Page 65: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing656.2.10 JTree (2/7)

트리

계층적은 데이터를 표현하기 위한 GUI 컴포넌트

형태

트리 사용 예

JMutableTreeNode root = new JMutableTreeNode("노드");

JMutableTreeNode n1 = new JMutableTreeNode("노드1");

root.add(n1);

JTree tree = new JTree(root);

Page 66: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing666.2.10 JTree (3/7)

TreeModeljavax.swing.tree패키지에 있는 인터페이스,

트리의 데이터 표현을 위해 사용하며 JTree의 각 노드를 관리. JTree의 각 노드는 toString() 메소드를 갖는 어떠한 객체도 사용될수 있음.

TreeCellRenderer트리의 노드 객체를 시각적으로 보여주는 클래스.

TreeModel을 구현하는 클래스와 TreeCellRenderer 클래스를 정의함으

로서 다양한 형태의 트리를 만들 수 있음.

DefaultTreeModel트리의 노드로 TreeNode를 사용.TreeNode는 7개의 메소드를 갖는 인터페이스. 일반적으로 TreeNode를 구현한 DefaultMutableTreeNode 클래스를 이용

해서 트리노드를 만들어 사용.

Page 67: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing676.2.10 JTree (4/7)

DefaultMutableTreeNode 클래스의 생성자

DefaultMutableTreeNode() DefaultMutableTreeNode(Object userObject) DefaultMutableTreeNode(Object userObject,

boolean allowsChildren)

userObject를 사용하는 경우에는 트리 노드에 표현되는 값은

userObject의 toString() 메소드의 리턴 값이다.

Page 68: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing686.2.10 JTree (5/7)

DefaultMutableTreeNode 클래스의 메소드들

void add(MutableTreeNode newChild) - newChild를 자식 노드로 붙임.Enumeration children() - 현재 노드의 자식 노드들을 리턴.TreeNode getChildAt(int index) - index번째의 자식 노드를 리턴.int getChildCount() - 자식 노드의 수를 리턴.int getDepth() - 루트노드에서 현재 노드까지의 깊이를 리턴.TreeNode getParent() - 부모 노드를 리턴.TreeNode[] getPath() - 루트 노드에서 현재 노드까지의 패스를 리턴.TreeNode getRoot() - 루트 노드를 리턴.boolean isLeaf() - 단말 노드인지 알아봄.boolean isRoot() - 루트 노드인지 알아봄.void remove(int childIndex) - childIndex번째의 자식 노드를 삭제.void remove(MutableTreeNode aChild) - 자식 노드를 삭제.void removeAllChildren() - 모든 자식 노드를 삭제.void setUserObject(Object userObject)-노드의 값으로 사용되는 userObject를 설정.

Page 69: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing696.2.10 JTree (6/7)

예제 : TreeDemo.java9 DefaultMutableTreeNode jcomponent =

10 new DefaultMutableTreeNode("JComponent");

11

12 DefaultMutableTreeNode jpanel =

13 new DefaultMutableTreeNode("JPanel");

14 DefaultMutableTreeNode jtextcomponent =

15 new DefaultMutableTreeNode("JTextComponent");……

19 jcomponent.add(jpanel);

20 jcomponent.add(jtextcomponent);……

31 JTree tree = new JTree(jcomponent);

32 JScrollPane sp = new JScrollPane(tree);

Page 70: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing706.2.10 JTree (7/7)

예제: TreeDemo.java(참고)

46 public void mousePressed(MouseEvent e) {

47 TreePath path = tree.getPathForLocation(e.getX(), e.getY());

48 if(path == null)

49 return;

50

51 Object o = path.getLastPathComponent();

52 if(o instanceof DefaultMutableTreeNode) {

53 DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;

54 Object uobj = node.getUserObject();

55 System.out.println(uobj);

56 }

Page 71: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing716.2.11 JInternalFrame (1/4)

6.2.11 JInternalFrame내부 프레임(JInternalFrame)은 컨테이너 내부에서 존재하는 프레임.

프레임을 아이콘화 하는 특징을 내부 프레임에 부가하기 위해서 Desktop

클래스를 내부 프레임과 같이 사용한다.

내부 프레임의 생성자

JInternalFrame() JInternalFrame(String title)JInternalFrame(String title, boolean resizable)JInternalFrame(String title, boolean resizable, boolean closable)JInternalFrame(String title, boolean resizable, boolean closable, boolean

maximizable)JInternalFrame(String title, boolean resizable, boolean closable, boolean

maximizable, boolean iconifiable)Desktop를 위해서 JDesktopPane 클래스를 제공. JDesktopPane 클래스에 내부

프레임을 붙임으로서 내부 프레임이 일반 프레임처럼 작동.

JDesktopPane 클래스 생성자

JDesktopPane()

Page 72: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing726.2.11 JInternalFrame (2/4)

내부 프레임

MDI(Multiple Document Interface) 형태를

지원하기 위한 GUI 컴포넌트

형태

내부 프레임 사용 예

JInternalFrame f = new JInternalFrame("타이틀", true);

f.setSize(400, 300);

f.setVisible(true);

Page 73: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing736.2.11 JInternalFrame (3/4)

예제: InnerFrame.java

11 JDesktopPane desk = new JDesktopPane();

12 iframe = new JInternalFrame("프레임", true, true, true, true);

13 text = new JTextArea();

14 iframe.getContentPane().add(new JScrollPane(text),

15 BorderLayout.CENTER);

16 desk.add(iframe);

17 iframe.setSize(400, 300);

18 iframe.setVisible(true);

19 getContentPane().add(desk, BorderLayout.CENTER);

Page 74: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing746.2.11 JInternalFrame (4/4)

예제 : InterFrameDemo.java5 JDesktopPane desktop;

6 JInternalFrame inframe;

11 desktop = new JDesktopPane();

12 inframe = new

13 JInternalFrame("내부프레임", true, true, true, true);

14

15 ok = new JButton("OK");

16 inframe.getContentPane().add(ok, BorderLayout.SOUTH);

17

18 inframe.setSize(200,100);

19 inframe.setVisible(true);

20 desktop.add(inframe);

21 getContentPane().add(desktop, BorderLayout.CENTER);

Page 75: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing756.3 6.3 메뉴메뉴 컴포넌트컴포넌트

메뉴

Page 76: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing766.3 6.3 메뉴메뉴 컴포넌트컴포넌트

예제: MenuTest.java1 import java.awt.event.*;

2 import javax.swing.*;

3

4 public class MenuTest extends JFrame implements ActionListener {

5 JMenuBar bar;

6 JMenu file, style;

7 JMenuItem fileNew;

8 JCheckBoxMenuItem num;

9 JRadioButtonMenuItem dos, unix;

10

11 public MenuTest() {

12 super("메뉴 테스트");

13 makeMenu();

Page 77: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing776.3 6.3 메뉴메뉴 컴포넌트컴포넌트

예제: MenuTest.java(계속)20 protected void makeMenu() {

21 bar = new JMenuBar();

22 file = new JMenu("File");

23 file.setMnemonic('F');

24 fileNew = new JMenuItem("New");

25 fileNew.addActionListener(this);

26 file.add(fileNew);

27 file.addSeparator();

28

29 num = new JCheckBoxMenuItem("Line Number");

30 num.addActionListener(this);

31 style = new JMenu("Style");

32 file.add(num);

33 file.add(style);

Page 78: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing786.3 6.3 메뉴메뉴 컴포넌트컴포넌트

예제: MenuTest.java(계속)35 dos = new JRadioButtonMenuItem("DOS Style",

true);

36 dos.addActionListener(this);

37 unix = new JRadioButtonMenuItem("UNIX Style");

38 unix.addActionListener(this);

39 ButtonGroup bg = new ButtonGroup();

40 bg.add(dos);

41 bg.add(unix);

42 style.add(dos);

43 style.add(unix);

44

45 bar.add(file);

46 setJMenuBar(bar);

Page 79: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing796.4 6.4 스윙스윙 내의내의 Border(1/3)Border(1/3)

보더 (Border) 스윙 컴포넌트 주위에 다양한 형태의 보더를 만들어줄 수 있다.스윙에서 보더는 javax.swing.border 패키지에 들어있다.JComponent 클래스에는 보더를 설정할 수 있는

setBorder() 메소드를 정의하고 있기 때문에

모든 스윙 컴포넌트들은 보더를 사용할 수 있다.보더 클래스

BevelBorder - 3D 형태의 양각/음각의 보더

CompoundBorder -2개의 보더가 네스팅(nesting)되서 하나의 보더를 형성한다.EmptyBorder - 보더 자리는 차지하지만 보이지 않는 투명한 보더

EtchedBorder - 홈 형태의 보더

LineBorder - 선 모양의 보더

MatteBorder - 색이나 아이콘을 사용하는 보더

SoftBevelBorder - 모서리가 둥근 형태의 BevelBorderTitledBorder - 텍스트가 있는 보더

Page 80: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing806.4 6.4 스윙스윙 내의내의 Border(2/3)Border(2/3)

보더

컴포넌트 주의의 경계를 표현하는 클래스

상속 관계

Page 81: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing816.4 6.4 스윙스윙 내의내의 Border(3/3)Border(3/3)

예제: WithBorder.java16 label.setBorder(new EtchedBorder());20 textB = new JButton("버튼" );21 textB.setFont(new Font("굴림체", Font.BOLD, 20));22 textB.setBorder(new BevelBorder(BevelBorder.LOWERED));23 textB.setToolTipText("<html><h3>텍스트 버튼</h3>" +24 "<font color=red><li>간단<li>편리</font></html>");25 getContentPane().add(textB);2627 ImageIcon project = new ImageIcon("chart.gif");28 iconB = new JButton("", project);29 iconB.setBorder(new BevelBorder(BevelBorder.RAISED));30 iconB.setToolTipText("<html><table border=1><tr>" +31 "<td>HTML</td></tr><tr><td>내용</td></tr></table></html>");32 getContentPane().add(iconB);

Page 82: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing826.5 Japplet(1/2)6.5 Japplet(1/2)

6.5 JApplet스윙에서 애플릿은 JApplet 클래스로부터 상속

JApplet는 디폴트로 보더 레이아웃을 사용하는 것 외에 Applet와 유사

주의할 점은 아이콘을 얻어오기 위해서는 URL을 이용해야 한다

예제: WithBorderApplet.java1 import java.awt.*;2 import javax.swing.*;3 import javax.swing.border.*;45 public class WithBorderApplet extends JApplet {6 JButton textB, iconB;7 JLabel label;9 public void init() {

10 getContentPane().setLayout(new FlowLayout());

Page 83: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing836.5 Japplet(2/2)6.5 Japplet(2/2)

12 ImageIcon logo = new ImageIcon(13 getImage(getDocumentBase(), "logo.gif"));14 label=new JLabel("대학교 로고", logo, JLabel.RIGHT);15 label.setFont(new Font("굴림체", Font.PLAIN, 20));16 label.setBorder(new EtchedBorder());17 label.setToolTipText("스윙 라벨입니다");18 getContentPane().add(label);1920 textB = new JButton("버튼" );21 textB.setFont(new Font("굴림체", Font.BOLD, 20));22 textB.setBorder(newBevelBorder(BevelBorder.LOWERED));

23 textB.setToolTipText("<html><h3>텍스트 버튼</h3>" +24 "<font color=red><li>간단<li>편리</font></html>");25 getContentPane().add(textB);

Page 84: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing846.6 Swing의 Drag & Drop 기능 (1/4)

드래그-앤-드랍(Drag & Drop)자바 프로그램간 혹은 일반 프로그램과 자바 프로그램간의 드래그-앤-드랍을 지원

용어 및 지원되는 클래스들

드래그 소스(DragSource) : 드래그-앤-드랍이 시작되는 GUI 컴포넌트

드래그 타겟(DropTarget) : 드래그-앤-드랍이 끝나는 GUI 컴포넌트

Transferable : 드래그-앤-드랍을 통해서 전달되는 데이터

DataFlavor : 드래그-앤-드랍을 통해서 전달되는 데이터 포맷

DnDConstants : 드래그-앤-드랍의 동작 방식

Page 85: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing856.6 Swing의 Drag & Drop 기능 (2/4)

예제: DnDText.java

2 import java.awt.dnd.*;

3 import java.awt.datatransfer.*;

6 public class DnDText extends JFrame implements DropTargetListener {

12 editor = new JTextArea();

13 target = new DropTarget(editor,

14 DnDConstants.ACTION_COPY_OR_MOVE, this, true, null);

21 public void dragEnter(DropTargetDragEvent dtde) {

22 System.out.println("dragEnter");

23 }

Page 86: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing866.6 Swing의 Drag & Drop 기능 (3/4)

예제: DnDText.java(예제)33 public void drop(DropTargetDropEvent dtde) {

35 if((dtde.getDropAction() &

36 DnDConstants.ACTION_COPY_OR_MOVE) != 0) {

37 dtde.acceptDrop(dtde.getDropAction());

38 Transferable tr = dtde.getTransferable();

39 try {

40 java.util.List list = (java.util.List)

41 tr.getTransferData(DataFlavor.javaFileListFlavor);

42 File file = (File)list.get(0);

43 char buf[] = new char[1024];

44 BufferedReader in =

45 new BufferedReader(new FileReader(file));

…48 while((n = in.read(buf, 0, 1024)) != -1) {

49 editor.append(new String(buf, 0, n));

Page 87: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing876.6 Swing의 Drag & Drop 기능 (4/4)

결과

Page 88: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing886.7 셀 편집기와 렌더러(1/4)

셀 렌더러

데이터 값을 화면에 보여주기 위해서 사용되는 클래스

리스트, 콤보 박스, 테이블, 트리에서 사용

보통 JLabel로부터 상속받은 클래스 사용

셀 편집기

셀 데이터 값을 수정할 수 있도록 지원하는 클래스

리스트, 콤보 박스, 테이블, 트리에서 사용

보통 JTextField로부터 상속받은 클래스 사용

Page 89: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing896.7 셀 편집기와 렌더러(2/4)

셀 렌더러 상속 관계

Page 90: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing906.7 셀 편집기와 렌더러(3/4)

예제: IconCellRenderer.java5 public class IconCellRenderer extends DefaultListCellRenderer {

12 public Component getListCellRendererComponent(JList list,

13 Object value, int index, boolean isSelected,

14 boolean cellHasFocus) {

15

16 String text = value.toString();

17 setText(text);

18 if(!icons.containsKey(text)) {

19 ImageIcon img = new ImageIcon(text + ".gif");

20 icons.put(text, img);

21 setIcon(img);

22 } else {

23 setIcon((ImageIcon)icons.get(text));

Page 91: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing916.7 셀 편집기와 렌더러(4/4)

예제: DeviceListCombo.java

5 protected JList list;

6 protected JComboBox combo;

7

8 public DeviceListCombo() {

9 super("아이콘을 갖는 리스트와 콤보");

10 String[] data = {"keyboard", "mouse", "joystick" };

11 list = new JList(data);

12 list.setBackground(Color.lightGray);

13 list.setCellRenderer(new IconCellRenderer());

14 getContentPane().add(new JScrollPane(list), "Center");

15

16 combo = new JComboBox(data);

17 combo.setRenderer(new IconCellRenderer());

Page 92: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing926.8 자바 룩-앤-필

룩-앤-필

스윙 GUI 형태를 동적으로 변경할 수 있는

방법을 제공

기본으로 제공되는 룩-앤-필자바

모티프

윈도우

기타 – JDK 버전에 따라 약간씩 다름

필요한 경우에 개발자가 새로운 룩-앤-필을

개발할 수 있음

Page 93: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing936.8 자바 룩-앤-필

예제: LookNFeelTest.java65 if(o == metal) {

66 try {

67 UIManager.setLookAndFeel(

68 "javax.swing.plaf.metal.MetalLookAndFeel" );

69 SwingUtilities.updateComponentTreeUI(this);

70 } catch(Exception ex1) {

71 ex1.printStackTrace();

72 }

73 } else if(o == motif) {

74 try {

75 UIManager.setLookAndFeel(

76 "com.sun.java.swing.plaf.motif.MotifLookAndFeel" );

77 SwingUtilities.updateComponentTreeUI(this);

Page 94: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing946.9 6.9 색색, , 폰트폰트, , 커서커서 (1/4)(1/4)

색(Color)널리 사용되는 색은 미리 정적 멤버 필드로 정의함

폰트(Font)폰트, 크기, 스타일을 지정할 수 있음

마우스 커서(Cursor)널리 사용되는 커서들은 정적 멤버 필드로 정의함

이미지를 이용해서 사용자 임의의 커서 사용 가능

Page 95: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing956.9 6.9 색색, , 폰트폰트, , 커서커서 (2/4)(2/4)

널리 사용되는 자바 폰트

폰트 스타일

Page 96: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing966.9 6.9 색색, , 폰트폰트, , 커서커서 (3/4)(3/4)

마우스 커서

Page 97: 제1장 자바 언어 소개 - Sookmyung Women's Universitymm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/6_Swing.pdf · 2010-05-19 · 6.2 스윙컴포넌트 12 6.2.1 Jcomponent 대부분의스윙클래스들은JComponent

Swing976.9 6.9 색색, , 폰트폰트, , 커서커서 (4/4)(4/4)

예제: DefinedCursor.java4 public class DefinedCursor extends JFrame {

5 Cursor cursor;

6 Image img;

7

8 public DefinedCursor() {

9 super("사용자가 정의하는 커서");

10

11 Toolkit tk = Toolkit.getDefaultToolkit();

12 img = tk.getImage("horse.gif");

13 Point point = new Point(0,0);

14 cursor = tk.createCustomCursor(img, point, "horse");

15 setCursor(cursor);