스윙(자바)
Swing (Java)Swing은 [1]Java용 GUI 위젯 툴킷입니다.이는 Oracle의 Java Foundation Class(JFC)의 일부로 Java 프로그램용 그래픽 사용자 인터페이스(GUI)를 제공하기 위한 API입니다.
Swing은 이전의 AWT(Abstract Window Toolkit)보다 더 정교한 GUI 컴포넌트 세트를 제공하기 위해 개발되었습니다.Swing은 여러 플랫폼의 외관과 느낌을 에뮬레이트하는 외관과 느낌을 제공하며, 기본 플랫폼과 무관한 외관과 느낌을 응용 프로그램에 제공할 수 있는 플러그형 외관과 느낌을 지원합니다.AWT보다 강력하고 유연한 컴포넌트를 갖추고 있습니다.Swing은 버튼, 체크박스 및 라벨과 같은 익숙한 컴포넌트 외에도 탭 패널, 스크롤 창, 트리, 테이블 및 [2]목록과 같은 몇 가지 고급 컴포넌트를 제공합니다.
AWT 컴포넌트와 달리 Swing 컴포넌트는 플랫폼 고유의 코드로 구현되지 않습니다.대신 이들은 모두 Java로 작성되므로 플랫폼에 의존하지 않습니다.
2008년 12월 Sun Microsystems(Oracle의 전신)는 JavaFX라고 [3]불리는 Swing의 후계자로 의도된 CSS/FXML 기반 프레임워크를 출시했습니다.
역사
Internet Foundation Class(IFC; 인터넷 기반 클래스)는 Netscape Communications Corporation에서 개발한 Java용 그래픽 라이브러리이며 1996년 12월 16일에 처음 출시되었습니다.1997년 4월 2일, Sun Microsystems와 Netscape Communications Corporation은 IFC를 다른 테크놀로지와 통합하여 Java Foundation [4]Class를 형성할 의도를 발표했습니다."자바 파운데이션 클래스"는 나중에 "스윙"으로 이름이 바뀌었다.
Swing은 애플리케이션 코드를 크게 변경하지 않고도 애플리케이션 내 모든 컴포넌트의 모양과 느낌을 변경할 수 있는 메커니즘을 도입했습니다.Swing 컴포넌트는 플러그형 외관을 지원하므로 플랫폼 독립성의 이점을 유지하면서 네이티브 컴포넌트의 외관을 모방할 수 있습니다.원래 별도로 다운로드 가능한 라이브러리로 배포된 Swing은 릴리스 [5]1.2부터 Java Standard Edition의 일부로 포함되어 있습니다.Swing 클래스 및 컴포넌트는 에 포함되어 있습니다.javax.swing
패키지 계층.
Swing의 후속 제품인 JavaFX의 개발은 2005년에 시작되었으며, 2년 후 JavaOne [6]2007에서 공식적으로 소개되었다.JavaFX는 2011년에 오픈소싱되었으며 2012년에는 Oracle JDK 다운로드의 일부가 되었습니다.JavaFX는 경량화, CSS 스타일링, 스타일리시한 디자인 컨트롤, FXML과 [7]Scene Builder 사용 등 몇 가지 이점 때문에 Swing을 대체하고 있습니다.2018년에 JavaFX는 Open JDK의 일부가 되었습니다.JFX는 [8]개발 속도를 높이기 위한 프로젝트입니다.
Swing을 담당한 Java Client 팀에는 James Gosling (아키텍트), Rick Levenson (매니저), Amy Fowler & Hans Muller (공동 테크니컬 리드), Tom Ball, Jeff Dinkins, Georges Saab,[9] Tim Prinzing, Jonni Kanerva 및 Je Hung Gimd Gim 2 (공동 테크니컬 리드)가 포함되어 있습니다.
아키텍처
Swing은 단일 스레드 프로그래밍 [11]모델을 따르는 Java용 플랫폼에 의존하지 않는 "모델-뷰-컨트롤러" GUI 프레임워크입니다.또한 이 프레임워크는 Swing 기반 GUI의 코드 구조와 그래픽 표시 사이에 추상화 레이어를 제공합니다.
기초
Swing은 완전히 Java로 작성되었기 때문에 플랫폼에 의존하지 않습니다.모든 Swing 클래스에 대한 자세한 내용은 Java API Guide for Version 6 또는 Java Platform Standard Edition 8 API Specification for Version 8을 참조하십시오.
확장 가능
Swing은 모듈러 기반의 고도의 아키텍처로 지정된 프레임워크인터페이스의 다양한 커스텀 구현을 「플러그」할 수 있습니다.사용자는 이러한 컴포넌트의 커스텀 구현을 통해 Java의 상속 메커니즘을 사용하여 기본 구현을 덮어쓸 수 있습니다.LookAndFeel
.
Swing은 컴포넌트 기반 프레임워크로, 그 컴포넌트는 모두 궁극적으로JComponent
클래스. swing 객체는 비동기적으로 이벤트를 발생시키고 속성을 바인딩하며 컴포넌트에 고유한 일련의 메서드에 응답합니다.swing 컴포넌트는 JavaBeans 사양에 준거한 JavaBeans 컴포넌트입니다.
설정 가능
Swing은 런타임 메커니즘과 간접 구성 패턴에 크게 의존하기 때문에 실행 시 근본적인 설정 변경에 대응할 수 있습니다.예를 들어 Swing 기반 응용 프로그램은 런타임 중에 사용자 인터페이스를 핫 스왑할 수 있습니다.또한 사용자가 원하는 룩 앤 필 구현이 가능하여 애플리케이션 코드를 프로그램적으로 변경하지 않고도 기존 Swing 애플리케이션의 모양과 느낌을 균일하게 변경할 수 있습니다.
경량 UI
Swing의 높은 수준의 유연성은 네이티브 호스트 운영체제(OS)의 GUI 컨트롤을 오버라이드하여 디스플레이를 실행할 수 있는 고유한 기능에 반영되어 있습니다.네이티브 사용자 인터페이스 툴킷을 호출하지 않고 Java 2D API를 사용하여 컨트롤을 "고통"시킬 수 있습니다.따라서 Swing 컴포넌트에는 대응하는 네이티브 OS GUI 컴포넌트가 없으며 기본 그래픽스 GUI에서 가능한 모든 방법으로 렌더링할 수 있습니다.
단, 그 핵심에서 모든 Swing 구성요소는 AWT 컨테이너에 의존합니다. (Swing's)JComponent
확장(AWT) 컨테이너.이를 통해 Swing은 중요한 디바이스/화면 매핑 및 키 누르기나 마우스 이동 등의 사용자 상호작용을 포함하여 호스트 OS의 GUI 관리 프레임워크에 연결할 수 있습니다.Swing은 기본(OS 고유의) 컴포넌트에 자체(OS에 구애받지 않는) 시멘틱스를 "전송"하기만 하면 됩니다.예를 들어, 모든 Swing 컴포넌트는 (AWT) 컨테이너에 정의되어 있는 component.paint() 호출에 응답하여 그래픽 디바이스에 그 표현을 그립니다.그러나 그림을 OS 네이티브 "헤비웨이트" 위젯에 위임한 AWT 컴포넌트와 달리 Swing 컴포넌트는 자체 렌더링을 담당합니다.
이러한 전환과 디커플링은 단순히 시각적인 것이 아니라 Swing의 컴포넌트 격납 계층 내에서 발생하는 이벤트에 대한 자체 OS에 의존하지 않는 시멘틱스의 관리와 적용으로 확대됩니다.일반적으로 Swing 아키텍처는 다양한 맛의 OS GUI 시멘틱스를 AWT 컨테이너에 단순하지만 일반적인 패턴으로 매핑하는 작업을 위임합니다.범용 플랫폼을 기반으로 자체 풍부하고 복잡한 GUI 시멘틱스를 구축하여JComponent
모델.
느슨한 결합과 MVC
Swing 라이브러리는 모델-뷰-컨트롤러 소프트웨어 설계 [12]패턴을 많이 사용합니다.이 패턴은 참조되는 데이터를 사용자 인터페이스 제어에서 개념적으로 분리합니다.이 때문에 대부분의 Swing 컴포넌트는 관련 모델(Java 인터페이스로 지정)을 가지고 있으며 프로그래머는 다양한 디폴트 구현을 사용하거나 독자적인 모델을 제공할 수 있습니다.이 프레임워크는 모든 구체적인 컴포넌트에 모델인터페이스의 디폴트 구현을 제공합니다.Swing 프레임워크의 일반적인 사용에서는 커스텀모델을 작성할 필요가 없습니다.이 프레임워크는 기본적으로 대응하는 디폴트 구현 세트를 투과적으로 제공하기 때문입니다.JComponent
Swing 라이브러리의 아이 클래스.일반적으로 테이블, 트리 및 때로는 목록과 같은 복잡한 컴포넌트만 애플리케이션 고유의 데이터 구조를 중심으로 커스텀모델 구현을 필요로 하는 경우가 있습니다.Swing 아키텍처가 가능하게 하는 가능성을 충분히 이해하려면 테이블 및 목록의 커스텀모델이 DAO 및/또는 EJB 서비스에 대한 래퍼라고 가정해 보겠습니다.
일반적으로 Swing 컴포넌트 모델오브젝트는 관련된 JC 컴포넌트에 의해 사용되는 (개념적인) 데이터 모델에 대해 이벤트를 정의하는 간결한 인터페이스를 제공하는 역할을 합니다.전체 MVC 패턴이 느슨하게 결합된 협업 객체 관계 패턴인 경우, 모델은 데이터 모델 객체에 이벤트 청취자를 부가하기 위한 프로그램 수단을 제공한다.일반적으로 이러한 이벤트는 모델 중심(예: 테이블모델의 "행 삽입" 이벤트)이며 JComponent 전문화에 의해 GUI 컴포넌트의 의미 있는 이벤트에 매핑됩니다.
예를 들어,JTable
라는 모델이 있습니다.TableModel
테이블이 테이블 데이터에 액세스하는 방법에 대한 인터페이스를 설명합니다.디폴트 실장은 2차원 어레이로 동작합니다.
Swing JComponent 뷰 컴포넌트는 개념적인 GUI 컨트롤을 그래픽으로 표현하기 위해 사용되는 객체입니다.Swing의 특징은 GUI 프레임워크로서 (네이티브호스트 OS의 GUI 컨트롤을 사용하는 것과는 달리) 프로그래밍 방식으로 렌더링된 GUI 컨트롤에 의존한다는 것입니다.Java 6 Update 10 이전 버전에서는 네이티브 컨트롤을 사용하는 AWT 컨트롤을 GUI에서 Swing 컨트롤과 혼합할 때 이 구별이 복잡했습니다(AWT와 Swing 컴포넌트 혼합 참조).
마지막으로 시각적 구성 및 관리 측면에서 Swing은 절대 레이아웃(컴포넌트의 정확한 위치와 크기를 지정함)이 아닌 상대 레이아웃(컴포넌트 간의 위치 관계를 지정함)을 선호합니다.이러한 "유동한" 시각적 순서에 대한 편견은 원래 Java GUI 툴킷의 설계와 개발을 프레임화한 애플릿 운영 환경에서 비롯되었기 때문입니다. (개념적으로 레이아웃 관리의 견해는 브라우저에서 HTML 컨텐츠의 렌더링을 알리는 것과 매우 유사하며, 동일한 우려 사항에 대처합니다.동기부여가 됩니다.)
AWT와의 관계
Java의 초기 버전 이후 AWT(Abstract Window Toolkit)의 일부는 사용자 인터페이스 컴포넌트에 플랫폼에 의존하지 않는 API를 제공하고 있습니다.AWT에서 각 컴포넌트는 기반이 되는 윈도우 시스템에 고유한 네이티브 피어 컴포넌트에 의해 렌더링 및 제어된다.
반면 Swing 컴포넌트는 운영체제의 윈도잉 툴킷에서 네이티브 자원을 할당할 필요가 없기 때문에 경량 컴포넌트로 설명되는 경우가 많습니다.AWT 컴포넌트는 헤비웨이트 [13]컴포넌트라고 불립니다.
Swing API의 대부분은 일반적으로 직접 대체가 아닌 AWT의 보완적 확장입니다.실제로 모든 Swing 경량 인터페이스는 궁극적으로 AWT 헤비웨이트 컴포넌트 내에 존재합니다. 왜냐하면 Swing의 모든 최상위 컴포넌트(JApplet
,JDialog
,JFrame
,그리고.JWindow
)는 AWT 최상위 컨테이너를 확장합니다.Java 6 Update 10 이전 버전에서는 Z 순서의 비호환성 때문에 같은 창에서 경량 컴포넌트와 중량 컴포넌트를 모두 사용하는 것은 일반적으로 권장되지 않았습니다.단, Java의 새로운 버전에서는 이러한 문제가 해결되어 Swing 컴포넌트와 AWT 컴포넌트 모두 Z 오더 문제 없이 하나의 GUI에서 사용할 수 있게 되었습니다.
Swing이 경량 컴포넌트를 그리기 위해 사용하는 코어 렌더링 기능은 JFC의 또 다른 부분인 Java 2D에 의해 제공됩니다.
SWT와의 관계
SWT(Standard Widget Toolkit)는 원래 IBM이 개발하고 현재 Eclipse 커뮤니티에서 유지 관리하는 경쟁 툴킷입니다.SWT의 구현은 AWT의 중량 컴포넌트와 더 많은 공통점을 가지고 있습니다.이를 통해 프로그래밍 모델의 네이티브 플랫폼에 대한 노출이 증가하는 대신 기본 윈도우 설정 툴킷에 대한 보다 정확한 충실도와 같은 이점을 얻을 수 있습니다.
SWT와 Swing의 성능에 대한 상당한 논쟁과 추측이 있어왔다. 일부에서는 SWT의 JNI에 대한 의존도가 높기 때문에 GUI 컴포넌트와 Java가 데이터를 통신할 필요가 있을 때는 속도가 느려지지만 데이터 모델이 GUI에 로드되었을 때는 렌더링 속도가 빨라질 것이라고 암시했지만 어느 [14]쪽도 확인되지 않았다.2005년의 꽤 철저한 벤치마크에서는 Swing과 SWT 어느 쪽도 다른 [15]쪽보다 확실히 우수하지 않다고 결론지었습니다.
예
안녕 세계
이 Swing 어플리케이션 예에서는 내부에 "Hello, world!"가 포함된 단일 창을 만듭니다.
// Hello.java (Java SE 8) 수입품 javax.displaces.displaces 를 클릭합니다.*; 일반의 학급 안녕 확장 JFrame { 일반의 안녕() { 잘 하는 군요("안녕하세요"); 이것..set Default Close 조작(창 상수.종료_ON_닫기); 이것..더하다(신규 JLABEL("안녕, 세상아!")); 이것..포장하다(); 이것..set Visible(진실의); } 일반의 정적인 무효 주된(최종 스트링[] args) { Swing Utilities(Swing Utilities).나중에 호출하다(안녕::신규); } }
첫 번째는 패키지의 모든 퍼블릭클래스와 인터페이스가 포함됩니다.
그Hello
학급extends
클래스JFrame
class는 제목 표시줄과 닫기 컨트롤이 있는 창을 구현합니다.
그Hello()
컨스트럭터는 처음에 슈퍼클래스 컨스트럭터를 호출하여 파라미터를 전달함으로써 프레임을 초기화합니다."hello"
창 제목으로 사용됩니다.그런 다음 에서 상속된 메서드를 호출합니다.JFrame
제목 표시줄의 닫기 컨트롤이 선택되어 있을 때 기본 동작을 설정합니다.이것에 의해JFrame
(숨김이 아닌) 프레임이 닫혔을 때 폐기됩니다.이것에 의해, Java 가상 머신은 종료해, 프로그램이 종료할 수 있습니다.다음으로 문자열 "Hello, world!" 및 에서 상속된 메서드에 대해가 생성됩니다.Container
superclass를 호출하여 라벨을 프레임에 추가합니다.에서 상속된 메서드Window
superclass는 창의 크기를 지정하고 내용을 레이아웃하기 위해 호출됩니다.
그main()
method는 프로그램이 시작될 때 Java 가상 시스템에서 호출됩니다.새로운 프레임을 인스턴스화하고 에서 상속된 메서드를 호출하여 표시합니다.Component
부울 파라미터가 있는 슈퍼클래스true
코드에서는 스레드 세이프 방식으로 코드가 실행되도록 하기 위해 AWT 이벤트 디스패치 스레드에서 컨스트럭터를 호출하는 방법을 사용합니다.프레임이 표시된 후main
모든 Swing 최상위 창이 삭제될 때까지 이벤트 디스패치 스레드가 활성화되어 있기 때문에 method는 프로그램을 종료하지 않습니다.
버튼이 있는 창
다음은 Swing 기반의 간단한 프로그램입니다.창이 표시됩니다(a).JFrame
라벨과 버튼이 포함되어 있습니다.
수입품 java.awt.플로우 레이아웃; 수입품 javax.displaces.displaces 를 클릭합니다.JButton; 수입품 javax.displaces.displaces 를 클릭합니다.JFrame; 수입품 javax.displaces.displaces 를 클릭합니다.JLABEL; 수입품 javax.displaces.displaces 를 클릭합니다.창 상수; 수입품 javax.displaces.displaces 를 클릭합니다.Swing Utilities(Swing Utilities); 일반의 학급 Swing 예시 용구 실행 가능 { @오버라이드 일반의 무효 달려.() { // 창 만들기 JFrame f = 신규 JFrame("안녕하세요!"); // 창을 닫을 때의 동작을 설정합니다. f.set Default Close 조작(창 상수.종료_ON_닫기); // 라벨 위에 버튼이 배치되지 않도록 레이아웃 관리자 추가 f.set Layout(set Layout)(신규 플로우 레이아웃()); // 라벨과 버튼 추가 f.더하다(신규 JLABEL("안녕, 세상아!")); f.더하다(신규 JButton("누르세요!")); // 창 안쪽에 컴포넌트 배열 f.포장하다(); // 기본적으로는 창이 표시되지 않습니다.보이게 해 주세요. f.set Visible(진실의); } 일반의 정적인 무효 주된(스트링[] args) { Swing 예시 인식하다 = 신규 Swing 예시(); // 이벤트 큐에서 올바른 시간에 실행되도록 응용 프로그램을 예약합니다. Swing Utilities(Swing Utilities).나중에 호출하다(인식하다); } }
Runnable 인터페이스를 구현하는 클래스의 인스턴스를 생성하여 Swing 컴포넌트의 인스턴스화와 처리를 모두 수행하는 방법에 주목하십시오.그런 다음 이 방법을 사용하여 이벤트 디스패치 스레드에서 실행됩니다.SwingUtilities.invokeLater(Runnable)
)는 주요 방법으로 작성됩니다(스윙 및 나사산 안전 참조).Swing 코드는 이 기술을 사용하지 않고 실행할 수 있지만(예를 들어 Runnable을 구현하지 않고 모든 명령을 실행 메서드에서 메인 메서드로 이동함으로써) Swing은 스레드 세이프가 아니기 때문에 여러 스레드에서 리소스를 호출하면 스레드 간섭 및 메모리 일관성 오류가 발생할 수 있으므로 양호한 형태로 간주됩니다.를 클릭합니다.[16]
또 다른 예
이 예에서는 javax.swing을 사용합니다.JFrame은 슈퍼클래스가 되어 독자적인 위젯(이 경우는 JButton)을 추가합니다.
수입품 javax.displaces.displaces 를 클릭합니다.JFrame; 수입품 javax.displaces.displaces 를 클릭합니다.JButton; 수입품 javax.displaces.displaces 를 클릭합니다.JOPtion 페인; 수입품 javax.displaces.displaces 를 클릭합니다.Swing Utilities(Swing Utilities); 수입품 java.awt.이벤트액션 리스트너; 수입품 java.awt.이벤트액션 이벤트; 일반의 학급 샘플 확장 JFrame { 사적인 최종 JButton b = 신규 JButton(); 일반의 샘플() { 잘 하는 군요(); 이것..setTitle("Hello App"); 이것..get Content Pane(콘텐츠 창)().set Layout(set Layout)(무효); 이것..세트바운드(100, 100, 180, 140); 이것..더하다(제조단추()); 이것..set Visible(진실의); 이것..set Default Close 조작(종료_ON_닫기); } 사적인 JButton 제조단추() { b.setText("클릭해!"); b.세트바운드(40, 40, 100, 30); b.add Action Listener(신규 액션 리스트너() { 일반의 무효 실행한 액션(액션 이벤트 e) { JOPtion 페인.show Message Dialog(b, '헬로 월드'); } }); 돌아가다 b; } 일반의 정적인 무효 주된(스트링[] args) 던지다 InvocationTargetException, 중단됨예외. { // Swing 콜은 이벤트 디스패치스레드에 의해 실행되어야 합니다. Swing Utilities(Swing Utilities).AndWait를 호출하다(() -> 신규 샘플()); } }
레이아웃은 를 사용하여 null로 설정됩니다.Container.setLayout(LayoutManager)
java.awt를 사용하기 때문에 메서드입니다.기본 레이아웃 매니저로서의 BorderLayout.BorderLayout을 사용하면 컨테이너에 추가된 모든 것이 중앙에 배치되고 다른 위젯을 수용하기 위해 늘어납니다.물론 대부분의 실제 GUI 어플리케이션에서는 모든 것을 절대 [17]좌표에 배치하는 대신 레이아웃 매니저를 사용하는 것을 선호합니다.
「 」를 참조해 주세요.
- swing Labs – 향후 Swing에 포함될 수 있는 스윙 확장 기능.
- 표준 위젯 툴킷– Eclipse Foundation이 관리하는 서드파티 위젯 툴킷.
- JavaFX – 데스크톱 애플리케이션 및 다양한 디바이스에서 실행할 수 있는 리치 인터넷 애플리케이션을 만들고 제공하기 위한 소프트웨어 플랫폼입니다.이 플랫폼은 Swing의 후속 버전입니다.JavaFX는 Open 아래에 있습니다.JFX [18]프로젝트
- Webswing - 순수 HTML5만을 사용하여 웹 브라우저 내에서 Java Swing 응용 프로그램을 실행할 수 있는 웹 서버입니다.
레퍼런스
인용문
- ^ "What is Java Swing? - Definition from Techopedia". Techopedia Inc. Retrieved 2018-11-03.
- ^ Yap, Chee (2003-04-30). "JAVA SWING GUI TUTORIAL". New York University (NYU). Retrieved 2018-11-03.
- ^ "Developing a basic GUI application using JavaFX in Eclipse".
- ^ "Sun and Netscape to jointly develop Java Foundation Classes". Netscape Communications Corporation. 1997-04-02. Archived from the original on 2012-05-09. Retrieved 2011-08-08.
- ^ "SUN DELIVERS NEXT VERSION OF THE JAVA PLATFORM". Sun Microsystems. August 2007. Archived from the original on August 16, 2007. Retrieved 2012-01-08.
The Java Foundation Classes are now core to the Java 2 platform and includes:The Project Swing set of GUI components, Drag & Drop, Java 2D API which provides new 2D and AWT graphics capabilities as well as printing support, The Java look and feel interface, A new Accessibility API
{{cite web}}
: CS1 유지보수: 부적합한 URL(링크) - ^ "JDK 11 update: JavaFX will be decoupled from the JDK".
- ^ "Developing a basic GUI application using JavaFX in Eclipse".
- ^ Smith, Donald (March 7, 2018). "The Future of JavaFX and Other Java Client Roadmap Updates".
- ^ Zakhour, Sharon. "Why is Swing Called Swing?". The Java Tutorials Blog. Retrieved 24 September 2020.
- ^ John, Yu. "Rich clients emerge as alternatives for Web applications". ComputerWorld. Retrieved 24 September 2020.
- ^ Zukowski, John (August 21, 2007). "Swing threading and the event-dispatch thread". JavaWorld. Retrieved 2020-07-26.
- ^ Fowler, Amy. "A Swing Architecture Overview". Sun Microsystems. Retrieved 2020-07-26.
- ^ Zakhour, Sharon; Petrov, Anthony (April 2010). "Mixing Heavyweight and Lightweight Components". Oracle. Retrieved 2020-07-26.
- ^ Strenn, Stephen (March 3, 2006). "Swing vs. SWT Performance - Have a Look at the Call Stacks". Javalobby. Archived from the original on 2017-09-17.
- ^ Žagar, Klemen; Križnar, Igor (March 3, 2006). "SWT Vs. Swing Performance Comparison" (PDF) (1.4 ed.). Cosylab. Archived from the original (PDF) on 2015-05-26.
It is hard to give a rule-of-thumb where SWT would outperform Swing, or vice versa. In some environments (e.g., Windows), SWT is a winner. In others (Linux, VMware hosting Windows), Swing and its redraw optimization outperform SWT significantly. Differences in performance are significant: factors of 2 and more are common, in either direction.
- ^ http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html 이벤트 디스패치 스레드
- ^ Eckel, Bruce (2006). Thinking in Java (PDF) (4 ed.). Prentice Hall. p. 942. ISBN 978-0131872486. Archived from the original (PDF) on 14 May 2016. Retrieved 13 May 2016.
- ^ "JavaFX Developer Home". www.oracle.com.
원천
- 매튜 로빈슨, 파벨 보로비예프: 스윙, 제2판, 매닝, ISBN 1-930110-88-X
- 데이비드 M. 기어리: 그래픽 자바2, 제2권: 스윙, 프렌티스홀, ISBN 0-13-079667-0
- John Zukowski:Java Swing 최종 가이드, 제3판, Apress, ISBN 1-59059-447-9
- James Elliott, Robert Eckstein, Marc Loy, David Wood, Brian Cole: Java Swing, O'Reilly, ISBN 0-596-00408-7
- Kathy Walrath, Mary Campione, Alison Huml, Sharon Zakhour:JFC 스윙 튜토리얼: GUI 구축 가이드, Adison-Wesley Professional, ISBN 0-201-91467-0
- Joshua Marinacci, Chris Adamson:스윙핵스, 오라일리, ISBN 0-596-00907-0
- Ivan Portyankin, Swing, Effective User Interfaces(러시아어), 2010년 2월 2일, 모스크바, "Lory", ISBN 5-469-00005-2.