1단계: 노래 데이터를 JLabel에 보여주고 검색, 수정, 삭제 기능 제공 2단계: 노래 데이터를 JTable에 보여주고 검색, 수정, 추가, 삭제 기능 제공 3단계: 파사드 패턴을 이용해서 재사용가능한 JTable 기능 제공 앞에서 살펴본 Manager와 Manageable, 그리고 제너릭으로 구현된 SongMgr 클래스를 이용하여 다음과 같이 입력파일에서 입력 받아 Song 클래스 객체를 만들어 관리자가 관리하는 프로그램을 만들 수 있다. 다음은 콘솔 화면에서 파일 입력과 출력을 하는 클래스를 보여준다. public class SongConsoleMain extends Manager { public SongConsoleMain() { readAllSongs("songs.txt"); } void re..
데이터 파일로부터 읽어들인 매니저에서 JTable을 이용하여 GUI 화면을 구성하는 프로그램을 재사용가능하게 구현해 보고자 한다. 어떤 데이터 요소든 그에 맞게 테이블을 구성하고 열과 테이블 헤더를 구성할 수 있게 한다 검색과 수정, 삭제, 추가 기능을 가지는 JTable과 GUI 부분을 데이터가 달라져도 재사용할 수 있게 한다 데이터를 입력하고 구동하는 엔진 부분에서 GUIMain 객체를 호출하는 것으로 GUI가 시작되게 한다. 한 곡의 정보가 네 개의 항으로 구성되고 이것이 String[] 배열에 의해 데이터 엔진 부분과 연결된다. 이와 같이 동작하도록 작성한 프로그램에서 다음과 같이 두 개의 다른 데이터 파일에 대해 같은 방식으로 화면을 구성하도록 할 수 있다. 이렇게 하기 위해서 재사용 코드를 최..
컨테이너 계열 컨테이너란 다른 컴포넌트를 포함하는 영역을 나타내는 요소들이다. JPanel JPanel은 스윙 GUI에서 가장 기본이 되는 컴포넌트로 윈도우 상의 사각형 영역을 나타낸다. 위치, 크기, 배경색 등의 정보를 가지고 있으며, 다른 컴포넌트를 추가하여 배치하기 위한 기본 틀이라고 볼 수 있다. 스윙에서는 모든 요소들의 배치는 사각형 틀을 이용해야 하므로 필요할 때마다 다른 컴포넌트들을 담을 패널을 생성하여 사용하게 된다. JFrame 프레임은 화면 상에 독립적으로 존재하는 윈도우 부분을 나타낸다. 보통 스윙 프로그램에는 하나의 메인 프레임이 있고 그 안에서 마우스나 키보드를 처리하는 형태로 프로그램이 구성된다. 그리고 메인 클래스의 역할도 하게 된다. Container 컨테이너는 다른 컴포넌트..
요즘 어디가나 경품이 핫하죠? 이터레이터 패턴을 응용하여 경품 추첨 프로그램을 만들어 보겠습니다. 이 프로그램은 경품추첨 명단과 경품의 리스트를 받아 추첨하는 과정을 수행하는 프로그램입니다. 추첨 기능은 두가지여서 경품에 따라 차례로 명단에서 이름을 뽑는 방식과 명단에 있는 사람 중에서 랜덤한 순서로 한명씩 경품을 추첨하는 형태입니다. 먼저 전체적인 프로그램의 실행의 전체구조를 살펴보겠습니다. 명단을 가질 mList와 입력을 받을 스캐너를 만들고 명단을 읽어들인 후 전체 출력하고 나서 추첨부를 호출합니다. public class EventMgr { Scanner scan = new Scanner(System.in); ArrayList mList = new ArrayList(); void run() { r..
jar 파일이란 자바 프로그램을 컴파일하여 실행가능한 .class 파일을 생성하게 된다. 이 파일들을 묶어서 실행할 수 있는 파일로 만들어 놓은 것이 jar(자르) 파일이다. 이것을 다른 사람에게 주면 소스 코드 없이 프로그램을 실행시켜 볼 수 있다. 또는 라이브러리처럼 다른 사람이 만든 클래스를 이용하고자 할 때도 jar 파일을 어딘가 디렉토리에 설치하고 이클립스 같은 IDE에서 해당 경로를 설정하면 프로그램 안에서 import하여 사용할 수도 있다. 이클립스에서 jar 파일 export 하기 내가 만든 프로젝트를 jar 파일 형태로 다른 사람에게 제공하여 실행시켜 보게 하기 위해 Runnable JAR 파일을 export할 수 있다. 이것은 다음과 같은 순서로 할 수 있다. 위의 단계를 거쳐 내보낼 ..
JList는 간단한 데이터를 리스트로 관리하는데 유용하다. 그러나 필드가 여러 개 있는 복잡한 데이터라면 리스트 형태로는 필요한 데이터를 모두 보여줄 수 없다. 그러므로 JTable을 이용해야 한다. 이 클래스는 사용법도 상당히 복잡하지만, 데이터를 다루는 부분과 guI 부분을 분리하여 설계해야 하므로 프로그램의 모듈화 설계가 매우 중요하다. 이 프로그램은 GUI의 테이블 기능을 재사용 가능하도록 모듈화하여 작성되었다. 입력파일로 주어진 song 데이터에 대해 JTable을 포함하는 실행 화면은 다음과 같다. 실행화면 예시 song.txt 1 빅뱅 뱅뱅뱅 2015 2 빙뱅 WELIKE2PARTY 2015 3 아이유 마음 2015 4 Zion.T 꺼내먹어요 2015 5 빅뱅 LOSER 2015 6 백아연 ..
업다운 버튼과 숫자 편집창, 그리고 기록을 누적하여 기록하는 다음과 같은 프로그램을 만들어 보자. 이 프로그램은 다음과 같은 기능을 가진다. 업 다운 버튼으로 상단 편집창의 숫자를 증가 또는 감소시킨다 RECORD 버튼으로 편집창의 숫자를 하단의 기록창에 누적하여 덧붙인다. 업 다운 버튼이 눌려질 때마다 상단의 배경색을 랜덤하게 바꾸어 준다. 이런 기능을 구현하기 위해 필요한 단계를 차례로 살펴본다. 화면 구성 (레이아웃) 자바 스윙에서는 화면 구성이 좀 번거로운 점이 있다. 이것을 화면 빌더 같은 툴을 이용하여 설계하면 편리하지만, 간단한 화면 구성은 작성할 수 있으면 코드도 깔끔하고 유지보수가 쉽다. 위의 화면은 상단(편집창), 중간(버튼 세개), 하단(라벨로 텍스트 여러 줄 보여줌)으로 구성된다. ..
자바 개발을 하다보면 이클립스 같은 IDE를 사용하지 않고 명령프롬프트 만으로 프로그램을 컴파일하거나 실행시켜 볼 수 있어야 한다. 간단하게 프로그램을 테스트하거나 환경을 점검하기 위해 필요한 일이 많다. 그럴 때 메모장과 명령 프롬프트만으로 자바 프로그램을 실행시키는 방법을 살펴보자. 명령 프롬프트 열기 명령 프롬프트 창을 다음과 같이 실행시킬 수 있다. 데스크탑 하단 왼쪽의 검색하려면 여기에 입력하십시오 라는 검색창에 “cmd”를 입력하면 “명령 프롬프트” 프로그램이 검색되고 그것을 선택하면 다음과 같은 창이 뜬다. (디폴트는 검은색 바탕에 흰 글씨로 보임) 명령창에서 내가 원하는 디렉토리로 이동하기 위해 cd 명령을 사용하면 된다. 원하는 디렉토리는 탐색기에서 해당 디렉토리로 이동한 후 주소창을 클..
제 블로그에서 가장 인기있는 글이 if 문 줄이기인데, 최근 신간 『자바 코딩의 기술』 에 비슷한 내용이 있네요. 새로운 것도 있고 중요한 것 같아서 제 나름대로 다시 한번 정리해 보았습니다. 한국 상황에 맞게 약간 변경도 했습니다. 물론 이 책에는 이외에도 수준높은 내용들이 엄청나게 많습니다. 거기서 초보 개발자에게 의미있을 만한 일반적인 규칙들입니다. (1) 불필요한 비교 조건식을 지워라 자바 언어에서는 int나 숫자 타입에 대해 반드시 비교를 해야 참거짓으로 바꿀 수 있다. 그런데 가끔 이런 문제 때문에 수식이나 함수의 결과가 진위형일 때도 == true 같이 비교식을 쓴 경우가 있다. 불필요한 진위식의 비교는 지우는 것이 필요하다. if (largerThanA(x) == true) 일반적으로 진위..
- Total
- Today
- Yesterday
- 콜렉션
- 스트링
- sort key
- follow
- python exercise
- contentEquals
- Camel Style
- max
- python example
- 패턴
- rust
- 지연계산
- ToString
- comparable
- C++ 클래스
- APPEND
- 이터러블
- format
- 스트링 +
- TypeError
- CompareTo
- indexof
- typedef
- 동적바인딩
- Iterator
- zip
- 이터레이터
- 자바regex
- contains
- Lazy evaluation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |