자바 수업 6일차 (마지막)
☞ 스윙 이어서...
* 자바에서는 클래스 내부에 새로운 클래스를 포함하여 사용하는 것을 허용한다.
- 이러한 클래스를 내부inner 클래스라 한다.
- 내부 클래스는 다른 용도로도 사용할 수 있지만, 이벤트를 처리할 때 유용하다.
1 2 3 4 5 6 7 | class OutClass { ...... class InnerClass { // 내부 클래스 선언. ...... // 외부 클래스의 모든 요소 사용 가능. } ...... } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import javax.swing.*; import java.awt.*; import java.awt.event.*; class Event2 extends JFrame { JLabel jl; // 버튼과 라벨을 클래스의 속성으로 지정. JButton jb1, jb2; public Event2() { Container ct = getContentPane(); ct.setLayout(new FlowLayout()); jb1 = new JButton("사랑합니다."); jb2 = new JButton("행복합니다."); jl = new JLabel("버튼을 누르세요."); jb1.addActionListener(new EventProcess()); // 두 개의 버튼에 리스너를 등록. jb2.addActionListener(new EventProcess()); // 처리 객체로 내부 클래스 지정. ct.add(jb1); ct.add(jb2); ct.add(jl); setTitle("Event Test2"); setSize(250, 150); setVisible(true); } private class EventProcess implements ActionListener { // 내부 클래스로 인터페이스를 포함하는 클래스 작성. public void actionPerformed(ActionEvent e) { // 이벤트 처리 루틴 작성. jl.setText(e.getActionCommand()); // 외부 클래스의 속성인 라벨을 직접 사용. // ActionEvent 객체를 이용하여 // 버튼의 라벨값을 추출. } } } public class EventTest2 { public static void main(String[] args) { new Event2(); } } | cs |
* 이벤트 처리를 위한 클래스를 별도로 작성하여 이벤트를 처리하는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import javax.swing.*; import java.awt.*; import java.awt.event.*; class EventClass implements ActionListener { // 별도의 이벤트 처리 클래스 생성. JLabel jl; public EventClass(JLabel jl) { this.jl = jl; } public void actionPerformed(ActionEvent e) { jl.setText(e.getActionCommand()); } } class Event3 extends JFrame { JLabel jl; JButton jb1, jb2; public Event3() { Container ct = getContentPane(); ct.setLayout(new FlowLayout()); jb1 = new JButton("사랑합니다."); jb2 = new JButton("행복합니다."); jl = new JLabel("버튼을 누르세요."); jb1.addActionListener(new EventClass(jl)); // 리스너를 등록. jb2.addActionListener(new EventClass(jl)); // 처리 객체를 지정할 때 JLabel 객체 전달. ct.add(jb1); ct.add(jb2); ct.add(jl); setTitle("Event Test3"); setSize(250, 150); setVisible(true); } } public class EventTest3 { public static void main(String[] args) { new Event3(); } } | cs |
* ImageIcon 클래스
- 이미지를 아이콘화하여 제공하는 클래스이다.
- [형식]
ImageIcon(String filename)
ImageIcon(URL url)
※ filename : 이미지 파일을 지정하여 아이콘을 생성.
url : 웹 주소를 지정하여 아이콘을 생성.
* JLabel 클래스
- 라벨을 만드는 클래스이다.
- [형식]
JLabel(ImageIcon i)
JLabel(String s)
JLabel(String s, ImageIcon i, int align)
※ i : ImageIcon 객체로 라벨 생성.
s : 문자열을 사용하여 라벨 생성.
align : 아이콘과 문자열의 위치를 의미.
SwingConstants 인터페이스의 상수를 사용.
(SwingConstants.LEFT, SwingConstants.RIGHT, SwingConstants.CENTER, SwingConstants.LEADING, SwingConstants.TRAILING)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import javax.swing.*; import java.awt.*; import java.awt.event.*; class JLabel1 extends JFrame implements ActionListener { private JLabel result = new JLabel(); // 이벤트 처리를 위해 속성으로 선언. public ImageIcon i1, i2; public JLabel1() { i1 = new ImageIcon("image/apple.jpg"); // 이미지 아이콘 객체 생성. i2 = new ImageIcon("image/pear.jpg"); JButton apple = new JButton("사과"); JButton pear = new JButton("배"); Container ct = getContentPane(); ct.setLayout(new FlowLayout()); ct.add(apple); ct.add(pear); ct.add(result); apple.addActionListener(this); // 버튼 객체에 리스너 등록. pear.addActionListener(this); setTitle("JLabel Test1"); setSize(300, 250); setVisible(true); } public void actionPerformed(ActionEvent ae) { if(ae.getActionCommand() == "사과") { // 버튼에 따라 결과를 출력. result.setText("맛있는 사과입니다."); result.setIcon(i1); // 라벨의 아이콘을 설정. } else { result.setText("맛있는 배입니다."); result.setIcon(i2); } } } public class JLabelTest1 { public static void main(String[] args) { new JLabel1(); } } | cs |
* 텍스트 클래스
- 한 줄 : JTextField
- 여러 줄 : JTextArea
- [형식]
JTextField()
JTextField(int cols)
JTextField(String str, int cols)
JTextField(String str)
JTextArea()
JTextArea(String str)
JTextArea(int rows, int cols)
JTextArea(String str, int rows, int cols)
※ str : 생성될 때 나타낼 문자열.
cols, rows : 텍스트 필드 또는 텍스트 에리어의 화면에서의 크기.
입력되는 문자의 수와는 상관 없음.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import javax.swing.*; import java.awt.*; import java.awt.event.*; class JTFJTA1 extends JFrame implements ActionListener { JTextField jtf; // 텍스트 객체 선언. JTextArea jta; JLabel jl = new JLabel("입력하세요."); // 라벨 객체 생성. public JTFJTA1() { jtf = new JTextField(20); jta = new JTextArea(10, 20); jta.setEditable(false); // 텍스트 에리어 수정 불가 설정. Container ct = getContentPane(); ct.setLayout(new FlowLayout()); JPanel jp = new JPanel(); // 패널 객체 생성. jp.add(jtf); // 패널에 추가. jp.add(jta); ct.add(jp); // 컨테이너에 패널 추가. ct.add(jl); jtf.addActionListener(this); setTitle("JTextField, JTextArea Test1"); setSize(500, 300); setVisible(true); } public void actionPerformed(ActionEvent ae) { if(jta.getLineCount() <= jta.getRows()) { // 텍스트의 크기(줄)보다 작을 때만 추가. jta.append(ae.getActionCommand()+"\n"); jtf.setText(""); // 새로운 입력을 받기 위해, 기존의 내용을 비움. } else { jl.setText("입력이 종료되었습니다."); // 크기를 넘어서면 라벨을 출력하고, jtf.setEditable(false); // 텍스트 필드 수정 불가 설정. } } } public class JTFJTATest1 { public static void main(String[] args) { new JTFJTA1(); } } | cs |
* JList 클래스
- [형식]
JList()
JList(Object[] items)
※ items : 리스트로 생성할 배열.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import javax.swing.*; import java.awt.*; import javax.swing.event.*; // 스윙 이벤트 패키지 포함. class JList1 extends JFrame implements ListSelectionListener { private String[] fruitlist = {"persimmon", "banana", "apple", "grape", "cherry", "pear"}; // 과일 이름 배열 생성. private JList jlst = new JList(fruitlist); // 이름 배열로 리스트 객체 생성. private ImageIcon[] fruiticons = { // 아이콘 객체 배열 생성. new ImageIcon("image/persimmon.jpg"), new ImageIcon("image/banana.jpg"), new ImageIcon("image/apple.jpg"), new ImageIcon("image/grape.jpg"), new ImageIcon("image/cherry.jpg"), new ImageIcon("image/pear.jpg") }; private JLabel[] jlicon = new JLabel[6]; // 아이콘을 위한 라벨 객체 배열 생성. private JLabel jlname = new JLabel(); // 라벨을 저장할 객체 생성. public JList1() { Container ct = getContentPane(); JPanel jp1 = new JPanel(); jp1.setLayout(new GridLayout(3,2,5,5)); // 아이콘 패널 Grid 배치 관리자 설정. for (int i=0; i<6; i++) { jp1.add(jlicon[i] = new JLabel()); } JPanel jp2 = new JPanel(); jp2.add(jlname); ct.add(jlst, BorderLayout.WEST); // Border 배치 관리자로 설정. ct.add(jp1, BorderLayout.CENTER); ct.add(jp2, BorderLayout.EAST); jlst.addListSelectionListener(this); // 리스트에 리스너 등록. setTitle("JList Test1"); setSize(700, 300); setVisible(true); } public void valueChanged(ListSelectionEvent lse) { for (int i=1; i<6; i++) { // 아이콘을 모두 삭제. jlicon[i].setIcon(null); } int[] indices = jlst.getSelectedIndices(); // 선택된 항목을 배열로 추출. String s = "당신이 선택한 항목은 : "; for (int j=0; j<indices.length; j++) { // 선택된 아이콘을 표시. jlicon[j].setIcon(fruiticons[indices[j]]); s = s + fruitlist[indices[j]] + " "; // 선택된 아이콘의 문자열을 생성. } jlname.setText(s); // 선택한 아이콘의 문자열 표시. } } public class JListTest1 { public static void main(String[] args) { new JList1(); } } | cs |
수고하셨습니다.
'스마트웹&콘텐츠 개발자 과정 > Java' 카테고리의 다른 글
Java 프로그래밍 기초 수업 5일차 (0) | 2018.07.10 |
---|---|
Java 프로그래밍 기초 수업 4일차 (0) | 2018.07.09 |
Java 프로그래밍 기초 수업 3일차 (0) | 2018.07.06 |
Java 프로그래밍 기초 수업 2일차 (0) | 2018.07.05 |
Java 프로그래밍 기초 수업 1일차 (0) | 2018.07.05 |