앞의 글에 이어서 Song 리스트를 JTable로 보여주는 방법을 살펴본다. 결과는 다음과 같은 화면으로 보여진다. 이전 버전에서 바뀌는 내용 GUIMain의 가운데 있던 JLabel 대신에 JTable 객체가 스크롤패널에 들어가게 된다. 하단의 텍스트필드가 표의 컬럼 수만큼 생기고 그것을 통해 Song의 수정과 추가가 가능해진다. 한 곡의 정보를 엔진과 GUI 사이에 주고 받기 위해 String[]을 이용하게 된다. song_table 패키지 GUIMain : JFrame을 상속하여 메인 윈도우의 역할을 하는 클래스다. TablePanel: 실제 보여질 화면 내용을 가지는 클래스다. 테이블 부분(tableControlloer)과 아래쪽 패널(bottom)을 포함하여 화면을 구성하는 클래스다. Table..
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할 수 있다. 이것은 다음과 같은 순서로 할 수 있다. 위의 단계를 거쳐 내보낼 ..
프로그램에서 if 문은 매우 자주 쓰입니다. 그리고 원하는 조건을 잘 표현해서 if와 elif 문장을 구성하는 것이 프로그래밍에서는 절대적으로 중요한 기술입니다. 이번 회차에서는 이것을 좀더 구체적으로 살펴보겠습니다. 컴퓨터는 0과 1을 이용해 만들어지는 기계라고 합니다. 컴퓨터는 참 거짓을 잘 이해하고 그것을 이용해서 우리는 작업지시서를 만들 수 있습니다. 이러면 이걸 하고 저러면 저렇게 하고... 참이라고 생각되는 것들이 모여서 지식이 됩니다. 그리고 그런 것들이 자율자동차가 멈출 것인지 엑셀을 밟을 것인지 판단하기 위한 상태를 표현하게 되고 로봇이 동작하기 위한 알고리즘이 됩니다. 논리는 컴퓨터가 동작하는 가장 밑바탕이 되는 원리입니다. 컴퓨터 논리는 원래 논리학 또는 수학의 영역에 있던 많은 것을..
이제까지 이름으로 값을 기억하는 것과 연산과 수식을 계산하는 것을 살펴보았습니다. 또한 입력받은 값에 따라 동작하도록 프로그램을 작성해 보았고 결과를 사용자가 보기 좋게 출력하는 방법도 살펴보았습니다. 이번 회에는 계산을 수행할 때 값에 따라 또는 조건에 따라 다른 동작을 하도록 작성하는 법을 알아보겠습니다. 프로그램은 컴퓨터에게 어떤 계산이나 작업을 수행하게 하는 작업지시서인데, 작업은 값에 따라 또는 상황에 따라 하는 일이 달라져야 하는 경우가 많습니다. 식당가에서 돌아다니는 배민 딜리버리 로봇은 자기 위치와 목적지에 따라 그리고 맵에 따라 갈림길에서 직진할지 우회전할지 좌회전할지 결정해야 합니다. 이 때 어떤 조건을 만족하면 우회전하도록 프로그램이 작성되어 있을 것입니다. 이런 경우를 표현하는 것이..
프로그램가 어떤 계산을 하도록 컴퓨터에게 작업을 지시하기 위해서는 값을 정해 주어야 합니다. 그런데 문제는 이름에 값을 지정한 후 그것을 사용하여 계산을 하면 항상 같은 값에 대해서만 계산을 할 수 있다는 점입니다. 프로그램이 어떤 일을 하도록 작성되었다면 그 일을 여러 가지 값에 대해 다 할 수 있으면 훨씬 좋을 것입니다. 예를 들어 다음과 같은 코드를 살펴보겠습니다. > a = 15 > a % 2 == 0 False > a % 3 == 0 True > a % 5 == 0 True > a % 7 == 0 False a가 2, 3, 5, 7의 배수인지 알고 싶은데, 이런 식으로 하게 되면 다른 수에 대해 같은 걸 알기 위해 매번 이렇게 많은 코드를 직접 써야 되고 컴퓨터가 하는 일에 비해 우리가 쳐야 하..
- Total
- Today
- Yesterday
- python example
- CompareTo
- 콜렉션
- python exercise
- typedef
- format
- rust
- 스트링
- comparable
- TypeError
- 이터러블
- indexof
- 스트링 +
- APPEND
- 동적바인딩
- 패턴
- zip
- C++ 클래스
- follow
- 자바regex
- Iterator
- contentEquals
- contains
- 지연계산
- Lazy evaluation
- Camel Style
- ToString
- 이터레이터
- max
- sort key
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |