Java 16장. 스윙 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 + "입니다"); }
학습목표 사용자 인터페이스인 스윙 컴포넌트의 사용에 관해 학습한다. JComponent 클래스에 관해 학습한다. 스윙의 모든 컴포넌트 클래스에 관해 학습한다.
목차 section 1 스윙 컴포넌트 section 2 컴포넌트에서의 이벤트 처리 1-1 스윙(javax.swing) 패키지의 개요 1-2 JComponent 클래스 section 2 컴포넌트에서의 이벤트 처리 section 3 이미지 아이콘(ImageIcon)과 라벨(Label) section 4 텍스트 필드와 텍스트 에리어 section 5 버튼
목차 section 6 푸시 버튼 section 7 체크박스 section 8 라디오 버튼 section 9 콤보박스
1-1 스윙(javax.swing) 패키지의 개요 1 스윙 컴포넌트 1-1 스윙(javax.swing) 패키지의 개요 스윙(Swing) 선(sun)사가 넷스케이프사와 공동으로 개발한 새로운 그래픽 툴킷(toolkit) 그래픽을 JVM이 자체적으로 처리 컴포넌트를 그리기 위해 실행 중인 컴퓨터에서 하나의 컴포넌트(예를 들면 프레임 윈도)만을 사용 스윙과 관련된 모든 클래스들은 javax.swing 패키지에 포함
1-1 스윙(javax.swing) 패키지의 개요 1 스윙 컴포넌트 1-1 스윙(javax.swing) 패키지의 개요 스윙 패키지의 주요 클래스와 상속관계 525 page
1-1 스윙(javax.swing) 패키지의 개요 1 스윙 컴포넌트 1-1 스윙(javax.swing) 패키지의 개요 스윙 패키지 주요 클래스의 기능 클래스 설명 AbstractButton 버튼과 연관된 클래스들의 상위 추상 클래스 ButtonGroup 버튼을 그룹화하기 위한 클래스 ImageIcon 이미지를 아이콘으로 캡슐화하여 제공하는 클래스 JApplet 애플릿(applet)의 스윙 버전으로 Applet 클래스로부터 상속된 클래스 JButton 스윙에서 사용하는 버튼 클래스 JCheckBox 스윙에서 사용하는 체크박스 클래스 JCheckBoxMenuItem 스윙의 메뉴에서 사용하는 체크박스 클래스 JComboBox 풀다운 리스트를 보여줄 수 있는 콤보박스 클래스 JComponent 모든 스윙 컴포넌트의 상위 클래스 JLabel 스윙에서 사용하는 라벨 클래스 JMenu 스윙의 메뉴에서 사용하는 메뉴 클래스 JMenuBar 스윙의 메뉴바를 만들기 위한 클래스 JMenuItem 스윙에서 사용하는 메뉴 관련 클래스의 상위 클래스
1-1 스윙(javax.swing) 패키지의 개요 1 스윙 컴포넌트 1-1 스윙(javax.swing) 패키지의 개요 스윙 패키지 주요 클래스의 기능 클래스 설명 JPanel 스윙에서 사용하는 패널 클래스 JRadioButton 스윙에서 사용하는 라디오 버튼 클래스 JRadioButtonMenuItem 스윙의 메뉴에서 사용하는 라디오 버튼 클래스 JScrollPane 스크롤 윈도를 나타내는 클래스 JTabbedPane 그룹을 홀더 형태로 제공하는 윈도를 나타내는 클래스 JTable 데이터를 행과 열로 나타내는 클래스 JTextArea 스윙에서 사용하는 텍스트 에리어 클래스 JTextComponent 스윙에서 사용하는 텍스트 관련 클래스들의 상위 클래스 JTextFeild 스윙에서 사용하는 텍스트 필드 클래스 JToggleButton JCheckBox 클래스와 JRadioButton 클래스의 상위 클래스 JTree 트리 형태를 나타내는 클래스
1-2 JComponent 클래스 Jcomponent 클래스 1 스윙 컴포넌트 AWT 패키지의 Component 클래스와 Container 클래스의 하위 클래스 상위 클래스에서 제공되는 기본적인 기능(메소드)들을 그대로 상속받아 사용할 수 있다는 의미
1 스윙 컴포넌트 1-2 JComponent 클래스 JComponent 클래스의 상위 클래스와 하위 클래스 527 page
1-2 JComponent 클래스 JComponent 클래스의 메소드 메소드 설명 1 스윙 컴포넌트 protected void paintComponent(Graphics g) Graphics 객체 g를 이용하여 컴포넌트(주로 패널 객체)에 그래픽을 출력한다. void setFont(Font font) 컴포넌트에 나타낼 폰트를 설정한다. void setVisible(boolean aFlag) 컴포넌트를 나타낼 것인지를 지정한다.
1-2 JComponent 클래스 받아들일 이벤트와 연관된 인터페이스를 사용하여 클래스 생성 2 컴포넌트에서의 이벤트 처리 1-2 JComponent 클래스 받아들일 이벤트와 연관된 인터페이스를 사용하여 클래스 생성 GUI 구축을 위한 컴포넌트 객체를 생성 이벤트를 받아들인 컴포넌트 객체(여기서는 버튼 객체)에 리스너를 등록 public class MyButton implements ActionListener JButton mybutton = new JButton("선택"); mybutton.addActionListener(this);
1-2 JComponent 클래스 add() 메소드를 사용하여 컴포넌트를 패널(또는 프레임)에 추가 2 컴포넌트에서의 이벤트 처리 1-2 JComponent 클래스 add() 메소드를 사용하여 컴포넌트를 패널(또는 프레임)에 추가 이벤트를 처리할 이벤트 처리 루틴 작성(예 : action 이벤트) add(mybutton); public void actionPerformed(ActionEvent ae) { label.setText(ae.getActionCommand()) ; }
1-2 JComponent 클래스 실습예제 2 컴포넌트에서의 이벤트 처리 EventTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 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) 객체에 이벤트 리스너를 등록
1-2 JComponent 클래스 실습예제 2 컴포넌트에서의 이벤트 처리 EventTest1.java 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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(); 이벤트 처리 루틴 작성 버튼의 이름을 읽어 라벨로 출력
1-2 JComponent 클래스 프로그램 설명 2 컴포넌트에서의 이벤트 처리 03 : 이벤트 처리를 하는 프로그램을 작성하기 위해 java.event.* 패키지를 포함하였다. 04 : GUI 구축을 위해 JFrame 클래스로부터 상속받아 클래스를 작성하였으며, 또한 이벤트를 처리하기 위해 ActionListener 인터페이스를 포함하여 클래스를 작성하였다. 사용자는 컴포넌트에서 처리할 이벤트의 종류가 어떤 것인지를 판단하여 포함할 인터페이스를 결정하여야 한다. 05 : JLabel 객체를 생성하였다. 이 클래스에 관해서는 다음 절에서 설명한다. 이 클래스는 문자열을 나타내기 위한 객체이다. 여기서는 버튼을 누르면 그 결과를 나타내기 위해 사용한다. 메소드 밖에 private으로 선언하였다. 07~09 : GUI에서 필요한 컴포넌트 객체를 생성하였다. 두 개의 버튼 객체와 한 개의 라벨 객체를 생성하였다. 10 : 생성한 프레임과 연관된 컨테이너 객체를 생성하였다. 11 : 컨테이너에 컴포넌트를 배치할 때 사용할 배치관리자를 FlowLayout으로 설정하였다. 12~15 : 컨테이너에 컴포넌트를 추가하였다.
1-2 JComponent 클래스 프로그램 설명 2 컴포넌트에서의 이벤트 처리 16~17 : 두 개의 버튼에 이벤트 리스너를 등록하였다. 이벤트 리스너를 등록한다는 의미는 해당 컴포넌트에서 등록한 이벤트가 발생하면 그것을 이벤트 처리 루틴에 보내어 처리한다는 의미이다. 자바 프로그램에서 컴포넌트에서 발생된 이벤트를 처리하기 위해서는 반드시 컴포넌트에 관련 이벤트 리스너를 등록하여야 한다. 23 : ActionListener 인터페이스에는 actionPerformed(ActionEvent ae) 메소드가 선언되어 있다. 이 메소드를 오버라이딩하여 이벤트 처리 루틴을 작성한다. 이 메소드는 ActionEvent 클래스의 객체를 매개변수로 받아들이고 있다. 즉 JVM은 이벤트 리스너가 등록된 컴포넌트에써 이벤트가 발생하면, 관련 클래스로부터 객체를 생성하여 이벤트 처리 루틴에게 넘겨주게 된다. 이벤트 처리 루틴은 매개변수로 받은 이벤트 객체 정보를 이용하여 이벤트를 처리한다. 24 : getActionCommand() 메소드는 이벤트가 발생한 컴포넌트가 가진 레이블(버튼의 이름)을 반환하는 메소드이다. 반환된 이름을 출력할 객체의 내용으로 설정하고 있다.
2 컴포넌트에서의 이벤트 처리 1-2 JComponent 클래스
3 이미지 아이콘(ImageIcon)과 라벨(Label) 이미지를 아이콘화하여 제공하는 클래스 ImageIcon 클래스 생성자 ImageIcon(String filname) ImageIcon(URL url) 형식
3 이미지 아이콘(ImageIcon)과 라벨(Label) 메소드 설명 int getIconHeight() 아이콘의 높이를 픽셀 값으로 반환 int getIconWidth() 아이콘의 폭을 픽셀 값으로 반환 void paintIcon(Component comp, Graphics g, int x, int y) Graphics 객체 g의 x, y의 위치에 아이콘을 그린다. 아이콘을 그리는 작동에 대한 부가적인 정보는 comp에서 제공
3 이미지 아이콘(ImageIcon)과 라벨(Label) 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로 지정된 문자열을 설정
3 이미지 아이콘(ImageIcon)과 라벨(Label) 실습예제 JLabelTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 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) 객체에 이벤트 리스너를 등록
3 이미지 아이콘(ImageIcon)과 라벨(Label) 실습예제 JLabelTest1.java 18 19 20 21 22 23 24 25 26 27 } public void actionPerformed(ActionEvent ae) { result.setText("세계에서 가장 좋은 한국 입니다"); public class JLabelTest1 { public static void main(String[] args) { new JLabelDemo(); 문자열을 이벤트의 결과로 (JLabel 객체) 출력
3 이미지 아이콘(ImageIcon)과 라벨(Label) 프로그램 설명 07 : 이 프로그램은 앞 절의 전형적인 이벤트 처리 프로그램과 동일한 형태이다. 다만 국기의 사진을 이용하여 ImageIcon 객체를 생성한 다음, 그 객체를 이용하여 버튼 객체를 생성하였다. 다른 부분은 앞 절의 프로그램 설명 부분을 참조하기 바란다.
JTextField, JTextArea 클래스 생성자 4 텍스트 필드와 텍스트 에리어 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) 형식
실습예제 4 텍스트 필드와 텍스트 에리어 JTFandJTA.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 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 객체 생성 텍스트 필드 객체에 이벤트 리스너 등록
실습예제 4 텍스트 필드와 텍스트 에리어 JTFandJTA.java 17 18 19 20 21 22 23 24 25 26 27 28 29 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
4 텍스트 필드와 텍스트 에리어 프로그램 설명 06~16 : 두 개의 텍스트 관련 객체를 선언하였다. 이벤트 처리 루틴에서도 사용하기 때문에 메소드 외부에 private로 선언하였다. 08 : 20개의 문자를 저장할 수 있는 JTextField 객체를 생성하였다. 09 : 20개의 문자를 7줄로 나타낼 수 있는 JTextArea 객체를 생성하였다. 14 : 텍스트 필드에 입력한 내용을 텍스트 에리어에 나타내기 위해서는 텍스트 필드 이벤트 리스너를 등록해야 한다. 21 : 이벤트 처리 루틴에서 텍스트 필드에서 가져온 문자열을 텍스트 에리어에 첨가한다. append() 메소드는 현재 텍스트 에리어에 추가하는 메소드이다. 22 : 텍스트 필드의 내용을 clear 한다.
4 텍스트 필드와 텍스트 에리어
AbstractButton 클래스의 주요 메소드 5 버튼 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로 설정
JButton 클래스 생성자 형식 6 푸시 버튼 JButton(Icon i) JButton(String s) JButton(String s, Icon i) 형식
실습예제 6 푸시 버튼 JButtonTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 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); 3개의 국기를 가지고 ImageIcon 객체 생성 한국의 국기를 가지고 JButton 객체 생성 버튼이 눌러졌을 때 나타낼 이미지 아이콘 설정 마우스가 지나갈 때(rollover) 나타낼 이미지 아이콘 설정
실습예제 6 푸시 버튼 JButtonTest1.java 16 17 18 19 20 21 22 23 24 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public class JButtonTest1 { public static void main(String[] args) { new JButtonDemo1();
프로그램 설명 6 푸시 버튼 06~08 : 3개의 국기를 가지고 ImageIcon 객체를 생성하였다. 10~11 : 버튼이 눌러졌을 때, 버튼이 지나갈 때를 지정하는 메소드를 사용하여 아이콘을 설정하였다. 이 프로그램은 이벤트 처리 루틴이 없지만, AbstractButton 클래스의 메소드를 이용하여 이벤트를 처리한 효과를 나타내고 있다.
실습예제 6 푸시 버튼 JButtonTest2.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 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 객체를 사용하여 버튼 객체 생성
실습예제 6 푸시 버튼 JButtonTest2.java 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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(); 각 버튼에 이벤트 리스너 등록 각 버튼이 가진 라벨을 텍스트 필드의 내용으로 설정
6 푸시 버튼 프로그램 설명 08~17 : 5개의 과일 사진으로 ImageIcon 객체를 생성하고, 생성된 ImageIcon 객체로 버튼 객체를 생성하였다. 26~30 : 생성된 각 버튼에 이벤트 리스너를 등록하였다. 37 : 이벤트 처리 루틴에서 이벤트를 발생한 객체가 가진 문자열을(버튼의 이름) 텍스트 필드의 내용으로 나타내었다.
JCheckBox 클래스 생성자 JCheckBox 클래스의 메소드 형식 메소드 설명 7 체크박스 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로 설정하면 체크박스가 처음 나타날 때 선택된 상태로 나타나게 된다.
실습예제 7 체크박스 JCheckBoxTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 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 포함
실습예제 7 체크박스 JCheckBoxTest1.java 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 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(); 이벤트를 발생시킨 객체의 이름을 출력
7 체크박스 프로그램 설명 05 : 이 프로그램에서는 체크박스 컴포넌트를 사용하여 이벤트를 처리하고 있다. 체크박스 컴포넌트의 이벤트를 처리하기 위해서는 ItemListener 인터페이스를 포함해야 한다. 각 컴포넌트에서 발생 가능한 이벤트와 이벤트 처리를 위한 인터페이스의 선정 방법은 15장에서 설명하였다. 29 : getItem() 메소드는 이벤트를 발생시킨 객체를 Object형으로 반환한다. Object형의 객체는 하위 클래스의 어떠한 형으로도 형변환이 가능하다. 여기서는 Object형의 객체를 JCheckBox형으로 형변환하였다. getText() 메소드(AbstractButton 클래스 메소드)는 해당하는 객체의 문자열을 반환하는 메소드이다. 반환된 문자열을 텍스트 필드에 출력하고 있다.
7 체크박스
JRadioButton 클래스 생성자 ButtonGroup 클래스 생성자 ButtonGroup 클래스 메소드 형식 형식 메소드 8 라디오 버튼 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) 형식 ButtonGroup() 형식 메소드 설명 void add() 버튼 그룹에 버튼을 추가한다. 버튼 그룹에 속한 버튼은 하나만 선택될 수 있다.
실습예제 8 라디오 버튼 JRadioButtonTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 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 클래스 객체 생성 버튼 그룹 객체 생성
실습예제 8 라디오 버튼 JRadioButtonTest1.java 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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); 각 라디오 버튼을 하나의 그룹으로 만듦 각 버튼에 이벤트 리스너 등록
실습예제 8 라디오 버튼 JRadioButtonTest1.java 31 32 33 34 35 36 37 38 39 40 41 setVisible(true); } public void actionPerformed(ActionEvent ae) { jtf.setText(ae.getActionCommand()); public class JRadioButtonTest1 { public static void main(String[] args) { new JRadioButtonDemo();
프로그램 설명 8 라디오 버튼 08~11 : JRadioButton 클래스로부터 4개의 객체를 생성한다. 14 : 버튼을 하나의 그룹으로 만들기 위한 ButtonGroup 객체를 생성한다. 15~18 : 버튼 그룹 객체를 이용하여 각각의 라디오 버튼을 하나의 그룹으로 만든다.
void addItem(Object obj) 9 콤보박스 JComboBox 클래스 생성자 ComboBox 클래스 메소드 JComboBox() JComboBox(Vector v) 형식 메소드 설명 void addItem(Object obj) 콤보박스에 obj로 지정된 객체 항목을 추가한다.
실습예제 9 콤보박스 JComboBoxTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 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 객체 추가 콤보박스 객체에 아이템 추가
실습예제 9 콤보박스 JComboBoxTest1.java 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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(); 컨테이너에 콤보박스 추가 콤보박스에 이벤트 리스너 등록 getItem() 메소드를 이용하여 문자열 생성 문자열과 연관된 이미지를 이용하여 JLabel 객체 설정
9 콤보박스 프로그램 설명 04 : ComboBox 컴포넌트에서 발생되는 이벤트를 처리하기 위해 ItemListener를 포함하였다. 07 : 이미지 파일을 이용하여 ImageIcon 객체를 생성한 다음, 그 객체를 이용하여 Jlabel 객체를 생성하였다. 08 : JComboBox 클래스로부터 객체를 생성하였다. 12~17 : 콤보박스 객체에 아이템을 추가하였다. 추가된 아이템은 문자열 객체이다. 18 : 컨테이너에 콤보박스 객체를 추가하였다. 콤보박스는 6개의 아이템을 가지고 있다. 19 : 콤보박스에서 발생하는 이벤트를 처리하기 위해 이벤트 리스너를 콤보박스 객체에 등록하였다. 26 : ItemEvent 클래스의 getItem() 메소드를 이용하여 사용자에 의해 선택된 아이템의 문자열을 가져온다. 15장의 ItemEvent 클래스 부분을 참조하기 바란다. 27 : 문자열을 이용하여 ImageIcon 객체를 생성한 다음, JLabel 객체의 값으로 설정하여 나타낸다.
9 콤보박스
JList 클래스 생성자 JList 클래스의 주요 메소드 형식 메소드 설명 10 리스트 JList() JList(Object[] items) 형식 메소드 설명 int getSelectedIndex() 리스트 중에서 첫 번째 선택된 아이템의 인덱스를 반환 void setSelectedIndex(int index) index로 지정된 아이템을 선택 int[] getSelectedIndices() 리스트 중에서 선택된 모든 아이템의 인덱스를 배열로 반환 void setSelectedIndices(int[] indices) indices 배열에서 지정된 아이템을 모두 선택 Object getSelectedValue() 리스트 중에서 첫 번째 선택된 아이템을 Object 객체로 반환 Object[] getSelectedValues() 리스트에서 선택된 모든 아이템을 Object 객체의 배열로 반환(인덱스 순서)
실습예제 10 리스트 JListTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 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]; javax.swing.event.* 패키지 포함 ListSelectionListener 인터페이스 포함 JList 객체 생성 6개의 과일 사진을 이용하여 ImageIcon 객체 배열 생성, 이벤트 처리 루틴에서는 선택 된 항목의 인덱스를 사용하여 이미지를 나타냄 JLabel 객체 배열 선언
실습예제 10 리스트 JListTest1.java 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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에 이벤트 리스너 등록
실습예제 10 리스트 JListTest1.java 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 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 값으로 초기화 선택된 항목의 인덱스를 정수 배열로 생성 선택된 항목의 인덱스에 해당하는 이미지를 나타냄
10 리스트 프로그램 설명 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와 패널을 왼쪽과 가운데에 추가하였다.
프로그램 설명 10 리스트 25 : JList 객체에 이벤트 리스너(ListSelectionListener)를 등록하였다. 31 : 이벤트 처리 루틴으로 ListSelectionListener 인터페이스에 선언된 valueChanged(ListSelectionEvent lse) 메소드를 오버라이딩하였다. 일반적으로 이벤트 처리 루틴에서는 매개변수로 받은 객체의 메소드를 이용하여 이벤트를 처리하는데, 이 프로그램의 매개변수로 받은 ListSelectionEvent 객체를 사용하지 않는다. 33 : 모든 아이콘을 null 값으로 초기화시킨다. 즉 사용자가 이 프로그램을 계속 작동시키면, 이벤트가 발생할 때마다 선택된 부분을 나타내기 위해서는 전에 나타낸 그림을 초기화시켜야 한다. 35 : getSelectedIndices() 메소드는 JList 클래스에 선언된 메소드이다. 이 메소드는 선택된 항목의 인덱스를 정수 배열로 반환하는 메소드이다. 즉 사용자에 의해 선택된 모든 항목의 인덱스가 정수 배열로 반환되게 된다. 37 : 선택된 항목의 인덱스에 해당하는 이미지를 나타낸다. 예를 들어 현재 2개의 항목이 선택되었다면, 선택된 항목의 이미지 아이콘이 JLabel[0], JLabel[1]에 설정되어 나타나게 된다.
10 리스트
vsb와 hsb는 수직, 수평 스크롤 바를 설정하기 위해 사용되는 상수로서 다음과 같은 상수가 사용됨 11 스크롤 바 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) 형식
실습예제 11 스크롤 바 JScrollPaneTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 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개의 버튼 객체 생성
실습예제 11 스크롤 바 JScrollPaneTest1.java 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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 객체를 생성(스크롤 바 포함)
프로그램 설명 11 스크롤 바 05 : JPanel 객체를 생성하였다. 06 : 생성된 패널 객체에 레이아웃으로 20행 5열로 배치하는 레이아웃을 설정하였다. 11 : 두 개의 반복문을 사용하여 패널에 100개의 버튼 객체를 생성하여 추가하였다. 15~18 : 객체 생성을 위한 상숫값을 지정하였다. 객체가 패널의 크기보다 크면 자동적으로 스크롤 바가 나타나도록 설정하였다. 19 : JScrollPane 객체를 생성하였다.
11 스크롤 바
(String str,Component comp) 12 그룹 홀더 JTabbedPane 클래스 생성자 그룹 홀더 메소드 그룹 홀더를 사용하기 위한 일반적인 과정 JTabbedPane 클래스를 이용하여 그룹 홀더 객체를 생성 그룹 홀더에 추가할 각각의 홀더 객체를 JPanel 클래스를 이용하여 작성 생성된 JPanel 객체를 JTabbedPane 객체에 추가(addTab() 메소드 이용) 모든 홀더가 완성될 때까지 1-3번을 반복 완성된 그룹 홀더를 프레임에 추가 JTabbedPane() 형식 메소드 설명 void addTab (String str,Component comp) 그룹 홀더에 각각의 그룹들을 추가한다. 위 메소드에서 str은 홀더 의 제목을 의미하고, comp는 Component 객체로서 폴더의 내용을 가지고 있는 객체이다.
실습예제 12 그룹 홀더 JTabbedPaneTest1.java 01 02 03 04 05 06 07 08 09 10 11 13 14 15 16 17 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) { 이벤트 처리를 위해 리스너 포함 컴포넌트에 이벤트 리스너 등록 이벤트 처리 루틴
실습예제 12 그룹 홀더 JTabbedPaneTest1.java 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 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); 이벤트 처리를 위해 리스너 포함
실습예제 12 그룹 홀더 JTabbedPaneTest1.java 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 } 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 객체를 컨테이너에 추가
12 그룹 홀더 프로그램 설명 04-40 : 두 개의 패널 객체를 생성하였다. 패널에서 처리할 이벤트 리스너를 포함하여 작성하였으며, 각각의 패널에서 이벤트 처리 루틴을 작성하였다. 43 : JTabbedPane 객체를 생성하였다. 46~47 : addTab() 메소드를 이용하여 두 개의 패널 객체를 JTabbedPane 객체에 추가하였다. 48 : JTabbedPane 객체를 프레임의 컨테이너 객체에 추가하였다.
12 그룹 홀더
JTable 클래스 생성자 테이블을 사용하기 위한 절차 형식 13 테이블 생성된 JTable 객체를 이용하여 JScrollPane 객체를 생성 프레임의 컨테이너에 JScrollPane 객체를 추가 JTable(Object data[][], Object colHeads[]) 형식
실습예제 13 테이블 JTableTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 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", "임자용" }, 테이블의 헤더를 작성 테이블의 내용을 작성
실습예제 13 테이블 JTableTest1.java 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 { "멀티미디어공학전공", "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 객체를 추가
실습예제 13 테이블 JTableTest1.java 31 32 33 34 35 36 37 38 39 40 setSize(400,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public class JTableTest1 { public static void main(String[] args) { new JTableDemo();
프로그램 설명 13 테이블 07 : 테이블의 헤더를 작성하기 위해 문자열의 배열을 생성한다. 07 : 테이블의 헤더를 작성하기 위해 문자열의 배열을 생성한다. 08 : 테이블의 내용을 작성하기 위해 Object 클래스의 2차원 배열을 생성한다. Object 클래스의 내용으로는 어떤 형태의 객체도 삽입할 수 있다. 23 : 헤더와 내용으로 JTable 객체를 생성한다. 28 : JTable 객체를 이용하여 JScrollPane 객체를 생성한다. 즉 테이블에 스크롤을 붙인 형태가 된다. 29 : 프레임의 컨테이너에 JScrollPane 객체를 추가시키면, 테이블에 컨테이너에 추가된 형태가 된다.
13 테이블
14 메뉴 메뉴 관련 클래스 JMenuBar, JMenu, JMenuItem, JCheckBoxMenuItem, JradioButtonMenuItem 등 스윙의 메뉴의 작성 순서 JMenuBar 객체를 생성 메뉴바에 나타낼 JMenu 객체를 생성 각각의 메뉴에 매달리는 서브 메뉴를 JMenuItem 객체로 생성하여 메뉴에 추가 메뉴가 완성될 때까지 2-3번을 반복 메뉴가 완성되면 모든 메뉴를 JMenuBar에 추가 setJMenuBar() 메소드를 이용하여 메뉴바를 프레임에 추가
14 메뉴 실습예제 JMenuTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 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("저장하기"); jmb.add(menu1); 이벤트 처리를 위한 리스너 포함 이벤트 처리를 위한 리스너 포함 각 메뉴 객체 생성 서브 메뉴를 위한 JMenuItem 객체 생성 서브 메뉴에 리스너 등록 서브 메뉴를 메뉴에 추가 메뉴바에 메뉴 추가
14 메뉴 실습예제 JMenuTest1.java 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 jmi = new JMenuItem("열기"); jmi.addActionListener(this); menu2.add(jmi); jmi = new JMenuItem("잘라내기"); jmi = new JMenuItem("복사"); 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); 서브 메뉴 작성 및 추가 이벤트 처리를 위한 리스너 포함 메뉴바에 메뉴 추가 메뉴를 프레임에 추가
14 메뉴 실습예제 JMenuTest1.java 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 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(); 이벤트 결과를 나타낼 텍스트 박스 생성
프로그램 설명 14 메뉴 04 : 이벤트 처리하기 위해 ActionListener를 포함시켜 클래스를 작성한다. 09 : JMenuBar 클래스를 이용하여 메뉴바 객체를 생성한다. 10~11 : 메뉴바에 나타낼 각 메뉴 객체를 JMenu 클래스를 이용하여 생성한다. 12~14 : 서브 메뉴를 위한 JMenuItem 객체를 생성하고, 그 객체에서의 이벤트를 처리하기 위한 리스너를 등록한다. 생성된 메뉴 아이템 객체를 1011에서 생성된 메뉴 객체에 추가한다. 위와 같은 부분이 메뉴가 완성될 때까지 반복된다. 18 : 메뉴가 완성되면 메뉴바에 메뉴를 추가한다. 36 : 다 작성된 메뉴바를 프레임에 추가한다. setJMenuBar() 메소드는 JFrame 클래스에서 제공되는 메소드이다. 프레임의 메뉴바를 나타낸다. 메뉴바는 메뉴를 가지고 있고, 메뉴는 메뉴 아이템을 가지고 있어, 모든 메뉴가 나타나게 된다. 37 : 메뉴가 선택되었을 때(이벤트 발생) 그 메뉴를 나타낼 텍스트 박스를 생성하였다. 이벤트 처리 루틴에서 사용한다.
14 메뉴
학습정리 스윙(Swing) 컴포넌트 컴포넌트에서의 이벤트 처리 javax.swing 패키지는 가장 상위 클래스로 JComponent 클래스를 가진다. 그 의미는 JComponent 클래스에 제공되는 모든 메소드를 사용할 수 있다는 의미이다. JComponent 클래스는 java.awt 패키지의 Component, Container 클래스를 상위 클래스로 가진다. 컴포넌트에서의 이벤트 처리 컴포넌트에서 전형적인 이벤트 처리는 다음과 같은 순서로 이루어진다. 받아들일 이벤트와 연관된 인터페이스를 사용하여 클래스 생성 GUI 구축을 위한 컴포넌트 객체를 생성 이벤트를 받아들인 컴포넌트 객체(여기서는 버튼 객체)에 리스너를 등록 add() 메소드를 사용하여 컴포넌트를 패널(또는 프레임)에 추가 이벤트를 처리할 이벤트 처리 루틴 작성(예 : action 이벤트)
학습정리 스윙 컴포넌트의 사용과 이벤트 처리 다양한 컴포넌트를 사용하여 사용자 인터페이스를 구축할 수 있다. 대부분의 컴포넌트에서 이벤트 처리는 같은 형태로 처리된다. 이벤트를 처리하기 위해서는 우선 컴포넌트에서 발생하는 이벤트가 어떤 종류가 있는지를 판별해야 하고, 그 종류의 이벤트를 처리하기 위해서 사용하는 이벤트 리스너를 선택해야 한다. 이벤트를 처리할 클래스를 작성할 때에는 선별된 이벤트 리스너를 포함하여 작성하여야 하며, 리스너 인터페이스에서 선언된 모든 메소드를 오버라이딩하여 이벤트 처리 루틴을 작성하여야 한다.
16장. 스윙 수고하셨습니다. 질문 있습니까?