예제코드에서 다운로드는 첫 페이지 참조
각각의 실습코드는 SUB에 해당하는 폴더를 참조하세요.

인터페이스 명 특징
AWT Abstract Window Toolkit.
가장 기본적인 GUI Kit. 외관, 기능면에서 제한적일 수 있으며, 특정 플랫폼에 종속적일 수 있음
Swing AWT기반. 조금 더 많은 기능. 무거움.
Java FX Java SE 8 부터 기본 라이브러리에 포함(AWT, Swing후속)
플랫폼 독립적, CSS스타일링, 2D/3D, 애니메이션, 웹 렌더링 등 지원

AWT

AWT 단원별 목표
주제 폴더 파일 내용
기본 a_Basic A1 GUI프로그래밍을 위한 최소한의 코드로 구현합니다.
A2 타이틀바에 문자열을 넣습니다.
B 버튼을 추가합니다.
C 버튼에 기능을 추가합니다.
D1 종료 기능을 넣습니다.
D2 종료 기능을 좀 더 간단하게 구현합니다.
컴포넌트 b_Component A label을 실습합니다.
B button을 실습합니다.
C checkbot, radiobutton을 실습합니다.
D DropBox를 실습합니다.
E ListBox를 실습합니다. 중복허용 모드와 중복불가 모드에 대해 알아봅니다.
F Textarea로 입력 또는 출력을 실습합니다.
G 새로운 다이얼로그를 생성하고, 메시지를 보냅니다.
H text형식의 파일을 열어, 내용을 textarea에 출력합니다.
I Menubar에 메뉴를 추가하고, 이벤트를 처리합니다.
배치 c_layout A 버튼을 5개 생성하고, 자동배치모드를 이용해서 배치합니다.
B 동서남북모드로 버튼을 배치합니다.
C 사각모드로, 가로/세로 사이즈를 미리 정하고 순서대로 배치합니다.
D 카드모드는 순서대로 번갈아가며 배치됩니다.
Graphics d_Graphic A1 drawRec, drawRoundRect, drawArc, drawPolygon, fillRect, fillRoundRect, fillOval, clearRect를 실습합니다.
A2 setCurve를 이용해 곡선을 그립니다.
A3 마우스를 드레그하면, 따라서 선을 그립니다.
B1 jpg파일을 출력합니다.
B2 인터넷 이미지를 가져와 출력합니다.
B3 인터넷 이미지를 가져와 출력합니다. 로딩이 완료될 때까지 기다렸다가 출력합니다.
B4 이미지를 출력할 때, 타원으로 잘라서 타원모양만 출력합니다.
C1 Line2D, Rectangle2D, Ellipse2D 클래스를 이용해서 출력합니다.
C2 GeneralPath.lineTo()를 이용해서 자유곡선을 그립니다.
C3 클릭된 위치 정보를 가져와서, 이전 클릭된 위치까지 선을 긋습니다.
C4 두께(width), 선처리(CAP, JOIN)과 BEVEL, type(점선 등)을 변경해서 그립니다.
D1 그라데이션을 이용해서 영역을 채웁니다.
D2 패턴을 이용해서 영역을 채웁니다.
E 대상의 투명도를 조정해서 다시 칠합니다.(루틴 시간이 걸립니다.)
F1 이미 그려진 객체를 키보드 방향키 입력에 따라 좌우, 상하로 1px씩 움직입니다.
F2 이미 그려진 객체를 키보드 좌우 버튼에 따라 시계/반시계 방향으로 15도씩 움직입니다.
F3 이미 그려진 객체를 눌려진 버튼에 따라, 확대/축소, X/Y축 반전을 합니다.
G 성능 개선을 위해 버퍼에 그린 후 출력합니다.
예제 e_Example textOut 버튼이 눌리면 문자를 출력합니다.
trafficLight 체크박스 상태에 따라 대상을 변경합니다.

Swing

swing구조
Swing 단원별 목표
주제 폴더 파일 내용
컴포넌트 a_Component A JLabel, JTextField, JPasswordField, JFormattedTextField, JTextArea, JTextPane를 이용해서 출력합니다.
B JCheckBox, JRadioButton, JButton
C JComboBox, JList
D JProgressBar, JSlider
E JTree
F JTable
G1 JMenuItem, JMenu, JMenuBar,
G2 JPopupMenu
H JToolBar
I JFileChooser, JColorChooser
J image
K1 JPanel, JScrollPane, JTabbedPane, JInternalFrame, JSplitPane
K2 JLayeredPane,
K2 JOptionPane
배치 b_Layout A 자동정렬을 통해 버튼 10개를 배치합니다.
A2 우측정렬로 바꿉니다.
B 동서남북 배치를 이용해서 배치합니다.
C1 Grid정렬을 통해서 순서를 임의배치합니다.
C2 Grid를 병합해서 더 큰 영역을 만듭니다.
이벤트 처리 c_Event A 이벤트를 처리합니다. 암호는 "password"입니다.

JavaFX

환경설정

캡쳐는 eclipse입니다. vscode는 ScenBuilder설치 부분 참고해 주세요. vscode에서도 수행 가능합니다.

  1. javaFX코드를 다운로드. 라이브러리에 추가.
    라이브러리 추가 [ 링크 ] : page 3 - 7 내용
    모듈 추가 [ 링크 ] : page 8 -9 내용
    --add-modules=javafx.controls,javafx.fxml
  2. SceneBuilder를 다운받아 설치. ScenBuilder설치 : page 11 - 14 내용

javaFX 설치과정(블로그)

실습

코드는 Youtube:BroCode [ 링크 ] 를 참고하였습니다. 일부 코드는 수정되었습니다.

Swing 단원별 목표
순서 주제 폴더 내용
A 윈도우 생성 a_Start 윈도우를 생성합니다. 버튼 2개를 생성하고 이벤트를 console에 출력합니다.
B 전체화면 b_FullScreen 전체화면 모드로 프로그램을 실행합니다. 'q'를 누르면 해제됩니다.
C 도형출력 c_Drawing 자유 직선, 도형 및 그림을 출력합니다.
D 외부프로그램 d_SceneBuilder SceneBuilder를 설치합니다. 디자인 영역(.fxml)의 에디트합니다. 앞으로 예제는 모두 SceneBuilder를 사용합니다.
E 연결하기 e_Event 이벤트와 객체를 연결합니다.
F CSS f_CssStyle 객체에 class나 id를 부여해서 .css파일에서 디자인 합니다.
G Multi Scene g_Scene 두 개의 Scene을 생성하고, 이벤트에 따라 Scene을 변경합니다.
H Scene Message h_Login 첫 번째 화면에서 사용자 입력을 가져와서, 2번째 입력화면에서 사용합니다.
I Alert i_Logout 간단한 팝업 메시지를 출력하고자 할 때, Alert를 사용해 경고합니다.
J 이미지 j_ImageView 이미지를 출력합니다.
K Text가져오기 k_HowOldAreYou 입력정보를 가져와 18살 초과이면 "성인입니다."를 출력합니다.
L Radio선택 가져오기 l_Quiz 객체지향에 대한 간단한 Quiz를 풀어봅니다.
M Picker m_Picker Picker 다이얼로그를 통해 좀 더 수월하게 날짜, 색 입력을 받습니다.
N 선택상자 n_ChoiceBox ChoiceBox를 통해 입력받습니다.
O 슬라이더 o_Slider 새로 슬라이더를 통해 온도계 입력을 받고 Text로 출력합니다.
P 진행률 p_Progress hp(heal point)를 구현합니다. 타격버튼을 누르면 -10%, 물약 버튼을 누르면 55% 상승합니다.
Q 스피너 q_Spinner textarea의 입력을 위/아래의 버튼으로 변경할 수 있습니다.
R 리스트 r_ListView 입력받을 수 있는 리스트를 나열하고, 사용자가 선택합니다.
S 트리뷰 s_TreeView 폴더구조와 같이, 입력을 트리구조로 구성하여, 나열된 선택을 '리스트'보다 효과적으로 표현합니다.
T 메뉴 t_MenuBar 어플리케이션 상단에 메뉴바를 생성합니다.
U 크기변경 u_FlowPanel 어플리케이션의 크기를 변경하면, 배치된 버튼을 자동재배치 합니다.
V 키보드 v_KeyEvent 키보드 입력을 받아 console에 출력합니다.
W 애니메이션 w_Annimation 이미지를 이동, 회전, 확대, 투명도변경을 동시에 적용합니다.
X 영상 x_Media 영상을 재생, 멈춤, 이동 합니다.
Y 웹페이지 y_webView 웹페이지에 주소를 입력하고, "불러오기"를 클릭합니다. 이동 기록을 기억하고 불러올 수 있습니다.
Z 음악 z_Musiz MP3를 구현합니다. Song폴더에 3곡이 저장되어 있습니다.