안녕하세요? 이번 시간에도 마찬가지로 저번시간에 이어서 Java GUI 이벤트 처리에 대해서 알아보겠습니다.
1. 이벤트(Event)
- GUI 컴포넌트에서 발생되는 모든 행위
- 예를 들어 버튼을 클릭하거나 윈도우 종료단추를 클릭하는 행동
- ActionEvent(JButton, JTextField, JCheckBox, JFileChooser, JMenuItem, JRadioButton..)
- 버튼이 클릭되거나 리스트, 메뉴 등이 선택되었을 때 발생하는 이벤트
- ActionListener 인터페이스의 actionPerformed(ActionEvent) 메서드를 이용해서 처리
필드명 |
해당 키 |
ALT_MASK |
ALT 키 |
CTRL_MASK |
Ctrl 키 |
SHIFT_MASK |
Shifit 키 |
메소드 |
해당 키 |
getActionCommand() |
이벤트를 발생시킨 객체의 문자열을 가져온다 |
getSource() |
이벤트를 발생시킨 객체의 위치값을 가져온다. |
getModifiers() |
이벤트가 발생되었을 때 같이 사용된 modifier키들을 가져온다. |
- KeyEvent(JFrame, JButton, JTextField, JTextAread..)
- 키보드를 통해서 키 입력이 오면 발생
- KeyListener 인터페이스나 KetAdapter 추상클래스를 이용
- 이벤트 처리 메소드
- keyPressed(KeyEvent e) : 컴포넌트에서 키가 눌러지면 호출
- keyReleased(KetEvent e) : 키에서 뗄 때 호출
- ketTyped(KeyEvent e) : 키보드를 통해 문자가 입력되었을 때 호출
필드명 |
해당 키 |
VK_0 ~ VK_9 |
숫자 0~9 |
VK_A ~ VK_Z |
영문자 A~Z |
VK_F1 ~ VK_F24 |
기능키 F1 ~ F24 |
VK_ENTER |
엔터 키 |
VK_SPACE |
스페이스바 키 |
VK_BACKSPACE |
BackSpace 키 |
KEY_PRESSED |
키가 눌려진 이벤트 의미 |
KEY_RELEASED |
키가 눌렸다 놓아진 이벤트 의미 |
KEY_TYPED |
키 입력 이벤트 의미 |
메소드 |
내용 |
getKeyChar() |
이벤트에 의해 입력된 문자값을 가져온다. |
getKeyCode() |
이벤트에 의해 입력된 문자에 해당하는 코드값을 가져온다. |
- MouseEvent(JList를 제외한 거의 모든 컴포넌트)
- 마우스 버튼을 누르거나 특정 컴포넌트 안에 진입하거나 벗어날 때 호출되는 이벤트
- MouseListener 인터페이스나 MouseAdapter 추상 클래스를 이용해서 처리
- 메소드
- mouseClicked(MouseEvent e) : 마우스를 클릭했을 때 호출
- mouseEntered(MouseEvent e) : 마우스 커서가 컴포넌트 영역에 들어오면 호출
- mouseExited(MouseEvent e) : 마우스 커서가 컴포넌트 영역에서 벗어나면 호출
- mousePressed(MouseEvent e) : 마우스 버튼이 눌러지면 호출
- mouseReleased(MouseEvent e) : 마우스 버튼이 눌러졌다 띄어지면 호출
필드명 |
설명 |
MOUSE_CLICKED |
마우스 버튼이 클릭된 경우 발생되는 이벤트 |
MOUSE_ENTERED |
마우스 커서가 컴포넌트 영역으로 들어왔을 때 발생되는 이벤트 |
MOUSE_EXITED |
마우스 커서가 컴포넌트 영역 밖으로 나가면 발생되는 이벤트 |
MOUSE_PRESSED |
마우스 버튼이 눌러졌을 때 발생하는 이벤트 |
MOUSE_RELEASED |
마우스 버튼이 눌렀다 띄었졌을 때 발생하는 이벤트 |
MOUSE_DRAGGED |
마우스 버튼이 클릭된 상태에서 움직일 때 발생되는 이벤트 |
MOUSE_ MOVED |
마우스 커서가 움직일 때 발생되는 이벤트 |
메소드 |
내용 |
getClickCount() |
마우스 눌려진 횟수를 얻어온다. |
getPoint() |
마우스 이벤트가 발생한 좌표를 얻어온다. |
getX() |
마우스 이벤트가 발생한 X좌표를 얻어온다. |
getY() |
마우스 이벤트가 발생한 Y좌표를 얻어온다. |
- MouseMotionEvent(JList를 제외한 거의 모든 컴포넌트)
- 마우스를 움직이면 호출되는 이벤트
- MouseMotionListener 인터페이스 or MouseMotionAdapter 추상 클래스 이용
- 메소드
- mouseDragged(MouseEvent e) : 마우스 버튼이 눌러진 상태로 이동하면
- mouseMoved(MouseEvent e) : 마우스를 이동하면 호출
- WindowEvent(JFrame)
- 윈도우를 활성화, 아이콘화, 비활성화 작업 시 발생하는 이벤트
- WindowListener 인터페이스 or WindowAdapter 추상 클래스 이용
- 메소드
- windowOpened(WindowEvent e) : 윈도우가 열릴 때
- windowClosing(WindowEvent e) : 윈도우가 닫힐 때
- windowActivated(WindowEvent e) : 윈도우가 활성화 되었을 때
- windowDeactivated(WindowEvent e) : 윈도우가 활성화 되었을 때
- windowIconified(WindowEvent e) : 윈도우가 아이콘화 되었을 때
- windowDeiconfied(WindowEvent e) : 윈도우가 최소화 상태에서 원래도로 되돌아올 때
필드명 |
설명 |
WINDOW_ACTIVATED |
윈도우가 활성화될 때 발생 |
WINDOW_DEACTIVATED |
윈도우가 비활성화 될 때 발생 |
WINDOW_CLOSED |
윈도우가 닫힐 때 발생 |
WINDOW_CLOSING |
윈도우가 사용자의 요청으로 닫힐 때 발생 |
WINDOW_ICONIFIED |
윈도우가 아이콘화 될 때 발생 |
WINDOW_OPENDED |
윈도우가 생성될 때 발생 |
메소드 |
내용 |
getWindow() |
이벤트가 발생된 윈도우를 가져온다. |
- 이벤트 관련 객체
- Listener 인터페이스 - 하나 또는 2개 이상의 이벤트 처리를 위한 메소드를 소유한 인터페이스
- Adapter 클래스 - 2개 이상의 메소드를 가진 Listener를 변환한 추상 클래스
- 이벤트 처리
- 원하는 Listener를 클래스에 implements 하거나 Adapter 클래스를 상속
- 이벤트에 따라 호출되는 메소드 재정의
- 넘어오는 매개변수의 getSource()가 이벤트를 발생시킨 컴포넌트를 리턴
- 컴포넌트에 이벤트 리스너를 추가
- 이벤트 처리는 Anoymous Class를 이용해서 한번에 처리 가능
<Event 예제 소스코드1 - Event1.class>
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 | import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Event1 extends JFrame implements ActionListener { // 레이블과 버튼 정의 JLabel lbl; JButton btn1, btn2; public Event1(String str) { super(str); lbl = new JLabel("버튼을 입려하세요."); btn1 = new JButton("첫번째 버튼"); btn2 = new JButton("두번째 버튼"); // 버튼1,2를 ActionListener 사용하기 btn1.addActionListener(this); btn2.addActionListener(this); // 패널 생성 JPanel panel = new JPanel(); panel.add(btn1); panel.add(btn2); add("Center", panel); add("South", lbl); setSize(300, 200); setVisible(true); } // 이벤트 발생시 행동하는 함수 public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); if((JButton)obj == btn1) { lbl.setText("첫번째 버튼을 눌렀습니다."); } else { lbl.setText("두번째 버튼을 눌렀습니다."); } } } |
<Event 예제 소스코드1 - Main.class>
1 2 3 4 5 6 | public class Main{ public static void main(String[] args) { new Event1("ActionEvent 테스트"); } } |
<결과>
- 버튼 클릭을 리스너로 받아 이벤트 발생시 텍스트가 변함
<Event 예제 소스코드2 - Event2.class>
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 58 59 60 61 | import java.awt.Container; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JTextField; public class Event2 extends JFrame { // 텍스트 필드와 체크박스 정의 JTextField text; JCheckBox bold; public Event2() { super("체크박스에서 Item처리"); // Container를 생성해 FlowLayout 생성 Container c = getContentPane(); c.setLayout(new FlowLayout()); // 텍스트 필드에 "너구리 해적단" 쓰기 text = new JTextField("너구리 해적단", 10); text.setFont(new Font("굴림", Font.PLAIN, 14)); c.add(text); bold = new JCheckBox("진하게"); c.add(bold); // 체크박스 핸들러 생성 CheckBoxHandler handler = new CheckBoxHandler(); // 리스너를 만들어 핸들러 넣기 bold.addItemListener(handler); setSize(300,100); setVisible(true); } // 이벤트 발생시 처리될 메소드 public class CheckBoxHandler implements ItemListener { int valBold = Font.PLAIN;//보통 폰트 //[진하게]체크박스를 선택 또는 해제시 자동으로 실행 public void itemStateChanged( ItemEvent e ) { //이벤트가 발생한 컴포넌트가 bold이면 실행 if ( e.getSource() == bold ) //아이템의 상태 변화가 체크박스 체크 이면 if ( e.getStateChange() == ItemEvent.SELECTED ) valBold = Font.BOLD; //글꼴 스타일 진하게 else valBold = Font.PLAIN; //글꼴 스타일 보통으로 //지정한 폰트를 텍스트 상자에 적용 text.setFont( new Font( "굴림", valBold , 14 ) ); } } } |
<Event 예제 소스코드2 - Main.class>
1 2 3 4 5 6 7 8 9 10 11 | import javax.swing.JFrame; public class Main extends JFrame { public static void main(String[] args) { Event2 item = new Event2(); item.setDefaultCloseOperation(EXIT_ON_CLOSE); } } |
<결과>
2. Pane
- 특정 목적에 맞도록 작성된 컴포넌트
- JEditorPane
- 여러 가지 형태의 문서를 보여줄 수 있는 컴포넌트
- 일반 텍스트나 html, rft 문서를 보여줄 수 있습니다.
- JTabbedPane
- 여러 패널을 담을 때 사용하는 컴포넌트
- 기능별로 분류된 옵션들을 동시에 보여 줄 필요가 없고, 필요 시 하나의 패널만 보여주기 위해서 사용하는 컴포넌트
- 사용 방법은 타이틀이나 아이콘을 가지는 탭을 클립함으로써 여러개의 패널 중에 선택된 탭을 보여줌
- 탭의 위치는 기본적으로 왼쪽 위에 위치
<JTabbedPane 예제 소스코드1 - JTabbedPaneTest.class>
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 | import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.JTable; import java.awt.*; public class JTabbedPaneTest extends JFrame { // 텝과 레이블 변수 선언 JTabbedPane tab; JTable1 j1; JTable2 j2; public JTabbedPaneTest() { super("JTabbedPane 연습예제"); // 텝 생성과 위치 선정 tab = new JTabbedPane(JTabbedPane.TOP); // 패널 생성 JPanel one = new JPanel(); j1 = new JTable1(); JPanel two = new JPanel(); j2 = new JTable2(); // 패널 추가 one.add(j1); two.add(j2); // 탭 명칭과 컴포넌트 추가 tab.addTab("기본 데이터", one); tab.addTab("기타 데이터", two); getContentPane().add(tab, BorderLayout.CENTER); setSize(500, 200); setVisible(true); } public static void main(String args[]) { JTabbedPaneTest jt = new JTabbedPaneTest(); jt.setDefaultCloseOperation(EXIT_ON_CLOSE); } } |
<JTabbedPane 예제 소스코드2 - JTable1.class>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; // 첫 번째 탭 public class JTable1 extends JPanel { public JTable1(){ String title[] = {"번호", "이름", "나이"}; String data[][] = { {"1","너구리", "26"}, {"2","돼 지", "25"}, {"3","족제비", "26"} }; // 테이블 생성 JTable table = new JTable(data, title); JScrollPane sp = new JScrollPane(table); add(sp); } } |
<JTabbedPane 예제 소스코드3 - JTable2.class>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; // 두 번째 탭 public class JTable2 extends JPanel { public JTable2(){ String title[] = {"번호", "직업", "소속"}; String data[][] = { {"1","프로그래머", "네이X"}, {"2","백수", "집"}, {"3","디자이너", "엔X소X트"} }; // 테이블 생성 JTable table = new JTable(data, title); JScrollPane sp = new JScrollPane(table); add(sp); } } |
<결과>
- JOptionPane
- 실행하는 도중에 사용자로부터 데이터를 입력 받거나 특정한 메시지를 출력시켜 확인시키는 작업
- 자체적으로 실행시키는게 아니므로 showDialog()메소드를 통해 확인해야한다.
종류 |
기능 |
호출 함수 |
MessageDialog |
사용자에게 메시지를 보여준다. |
showMessageDialog() |
ConfirmDialog |
Yes, No, Cancel과 같은 버튼으로 확인 |
showConfirmDialog() |
InputDialog |
사용자로부터 자료를 입력받기 위한 다이어로그 |
showInputDialog() |
OptionDialog |
위 세 가지를 포함한 다이어로그 |
showOptionDialog() |
<JOptionPane 예제 소스코드 - JOptionPaneTest.class>
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 java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class JOptionPaneTest extends JFrame implements ActionListener { JButton btn[] = new JButton[4]; String[] str = {"로그인", "회원가입"}; public JOptionPaneTest() { super("JOptionpane 테스트"); setLayout(new FlowLayout()); btn[0]=new JButton("메세지"); btn[1]=new JButton("확인"); btn[2]=new JButton("입력"); btn[3]=new JButton("옵션"); for(JButton n : btn){ add(n); n.addActionListener(this); } pack(); setLocation(300,300); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getActionCommand()== "메세지") { JOptionPane.showMessageDialog(this,"메세지다이얼로그박스","메세지",JOptionPane.INFORMATION_MESSAGE); }else if(e.getActionCommand()=="확인") { JOptionPane.showConfirmDialog(this,"확인다이얼로그박스","확인",JOptionPane.YES_NO_OPTION); }else if(e.getActionCommand()=="입력") { JOptionPane.showInputDialog(this,"입력다이얼로그박스","입력",JOptionPane.YES_NO_OPTION); }else if(e.getActionCommand()=="옵션") { JOptionPane.showOptionDialog(this,"옵션다이얼로그박스","옵션",JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, str, str[1] ); } } public static void main(String[] args) { new JOptionPaneTest(); } } |
<결과>
3. JFileChooser
- 프로그램을 실행하는 도중에 데이터를 파일로부터 불러오거나 파일에 저장할 수 있도록 선택 다이어로그 생성
- 파일 선택창은 FileSystemView, FileView, FileFilter 등과 같은 컨트롤러와 함께
- FileSystemView는 파일 시스템과 디렉토리 정보를 제공
- FileView는 디렉토리 내부에 있는 파일들에 대한 정보를 제공
- FileFilter는 파일을 원하는 종류만 보여줄 수 있도록 걸러주는 역할
- 멤버필드
- static int CANCEL_OPTION : 취소를 선택했을 때 리턴되는 값
- static int APPROVE_OPTION : 예나 확인을 선택했을 때 리턴되는 값
- 생성자
- JFileChooser() : 디폴트 경로
- JFileChoorser(File currentDirectory) : 지정한 경로를 보여줌
- JFileChooser(String currentDirectoryPath) : 지정한 경로를 보여줌
<FileChooser예제 소스코드 - JFileChooserTest.class>
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 | import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.filechooser.FileNameExtensionFilter; public class JFileChooserTest extends JFrame implements ActionListener { // JFileChooser 선언 JFileChooser fc; public JFileChooserTest() { // JFileChooser 생성 fc = new JFileChooser(); // 여러가지 선택 가능 fc.setMultiSelectionEnabled(true); // JButton 생성 JButton btn = new JButton("파일선택"); btn.addActionListener(this); add("North", btn); setBounds(0, 0, 200, 200); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } // 버튼 클릭시 메소드 public void actionPerformed(ActionEvent e) { // 파일 이름 텍스트.txt가 디폴트값 FileNameExtensionFilter filter = new FileNameExtensionFilter("텍스트", "txt"); // 위 내용 적용 fc.setFileFilter(filter); // 다이어로그 생성 int result = fc.showOpenDialog(this); // 예 확인시 if(result == JFileChooser.APPROVE_OPTION) { // 파일 선택 File[] f = fc.getSelectedFiles(); int i = 0; for(File n : f) System.out.println(++i + "번째 선택한 파일:" + n.getName()); } } public static void main(String[] args) { new JFileChooserTest(); } } |
<결과>
4. JColorChooser
- 색상을 선택할 수 있는 다이어로그
- 생성자
- JColorChooser() : 초기 색이 흰색
- JColorChooser(Color initialColor) : 초기 색이 매개 변수
- JColorChooser(ColorSelectionModel model) : 지정된 선택 판 모델을 가지고 생성
- 메소드
- static JDialog createDialog(Component c , String title, boolean modal, JColorChooser chooserPane,
ActionListener okListener, ActionListener cancelListener)
- OK, Cancel 및 Reset 버튼과 함께 지정된 ColorChooser을 가지는 새로운 다이어로그 생성
- Color getColor() : 색상을 리턴
- void setColor(Color color): 색 설정
- void setColor(int c): 색 설정
- void setColor(int r, int g, int b): 색 설정
- static Color showDialog(Component component, String title, Color initialColor)
- 모델 다이얼로그로 화면에 표시
5. JMenu
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JRadioButtonMenuItem; public class JMenuTest extends JFrame { // JRadioButtonMenuItem 선언 private JRadioButtonMenuItem colorItems[], fonts[]; // JCheckBoxMenuItem 선언 private JCheckBoxMenuItem styleItems[]; // ButtonGroup 선언 private ButtonGroup fontGroup, colorGroup; public JMenuTest() { super("JMenu 테스트"); // 메뉴바 생성 JMenuBar bar = new JMenuBar(); setJMenuBar(bar); // 파일 메뉴 JMenu fileMenu = new JMenu("파일(F)"); fileMenu.setToolTipText("파일 메뉴입니다."); fileMenu.setMnemonic('F'); // 파일 메뉴 안에 내용 JMenuItem newItem = new JMenuItem("새파일(N)"); newItem.setMnemonic('N'); fileMenu.add(newItem); JMenuItem openItem = new JMenuItem("열기(O)"); openItem.setMnemonic('O'); fileMenu.add(openItem); JMenuItem saveItem = new JMenuItem("저장(S)"); saveItem.setMnemonic('S'); fileMenu.add(saveItem); JMenuItem exitItem = new JMenuItem("닫기(X)"); exitItem.setMnemonic('X'); fileMenu.add(exitItem); bar.add(fileMenu); // 편집 메뉴 생성 JMenu formatMenu = new JMenu("편집(E)"); formatMenu.setToolTipText("편집 메뉴입니다."); formatMenu.setMnemonic('E'); // 편집 메뉴 안에 내용 String colors[] = {"검정", "파랑", "빨강", "초록"}; JMenu colorMenu = new JMenu("색상(C)"); colorMenu.setMnemonic('C'); colorItems = new JRadioButtonMenuItem[colors.length]; colorGroup = new ButtonGroup(); for(int i = 0 ; i < colors.length ; i++) { colorItems[i] = new JRadioButtonMenuItem(colors[i]); colorMenu.add(colorItems[i]); colorGroup.add(colorItems[i]); } colorItems[0].setSelected(true); formatMenu.add(colorMenu); formatMenu.addSeparator(); String fontNames[] = {"굴림", "바탕", "고딕"}; JMenu fontMenu = new JMenu("글꼴(T)"); fontMenu.setMnemonic('T'); fonts = new JRadioButtonMenuItem[fontNames.length]; fontGroup = new ButtonGroup(); for ( int i = 0; i < fonts.length; i++ ) { fonts[ i ] = new JRadioButtonMenuItem( fontNames[ i ] ); fontMenu.add( fonts[ i ] ); fontGroup.add( fonts[ i ] ); } fonts[0].setSelected(true); fontMenu.addSeparator(); String styleNames[] = {"굵게", "기울임"}; styleItems = new JCheckBoxMenuItem[styleNames.length]; for ( int i = 0; i < styleNames.length; i++ ) { styleItems[ i ] = new JCheckBoxMenuItem( styleNames[ i ] ); fontMenu.add( styleItems[ i ] ); } formatMenu.add( fontMenu ); bar.add( formatMenu ); // 도움말 메뉴 생성 JMenu helpMenu = new JMenu( "도움말(H)" ); helpMenu.setToolTipText("도움말 메뉴입니다"); helpMenu.setMnemonic( 'H' ); JMenuItem helpItem = new JMenuItem( "도움말항목(L)" ); helpItem.setMnemonic( 'L' ); helpMenu.add(helpItem); bar.add( helpMenu ); setSize( 400, 200 ); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main( String args[] ) { new JMenuTest(); } } |
<결과>
여기까지 Java GUI의 대하여 알아보았습니다.
'조재연의 Java 개꿀떡 > 조재연의 Java 기초 개꿀떡' 카테고리의 다른 글
자바(Java)의 기초 박살내기 - Java GUI② (0) | 2017.07.18 |
---|---|
자바(Java)의 기초 박살내기 - Java GUI① (0) | 2017.07.14 |
자바(Java)의 기초 박살내기 - 스레드(Thread) (0) | 2017.07.10 |
자바(Java)의 기초 박살내기 - 예외처리(Exception) & java.lang 패키지 (0) | 2017.07.06 |
자바(Java)의 기초 박살내기 - 배열(array) (0) | 2017.07.05 |