이전 에이 프로그램은 가장 간단한 입력 및 출력 방법을 사용했습니다. 최신 프로그램에는 메뉴, 버튼 등이 포함 된 그래픽 사용자 인터페이스 (GUI)를 사용해야합니다. 사용자는 메뉴에서 옵션을 선택하고 마우스를 통해 버튼을 클릭하여 프로그램 기능 모듈을 명령합니다. 이 장에서는 Java 언어로 GUI 과학 실험을 작성하는 방법과 GUI를 통해 입력 및 출력을 구현하는 방법을 배웁니다.
AWT와 스윙
이전에는 Abstract Window Toolkit AWT (Abstract Window Toolkit)를 사용하여 Java에서 GUI 프로그램을 작성했습니다. Swing은 AWT를 대체하기보다는 개선 된 AWT 버전으로 간주 될 수 있으며 AWT의 개선 및 확장입니다. 따라서 GUI 프로그램을 작성할 때는 스윙과 AWT를 모두 사용해야합니다. 그들은 Java Foundation 클래스 (JFC)에서 공존합니다.
AWT와 Swing은 그래픽 인터페이스 요소를 구성하는 클래스를 제공하지만, 중요한 측면은 기본 플랫폼에 의존하여 사용자 인터페이스 구성 요소를 그리는 반면, 스윙은 주요 플랫폼에서 제공하는 고유 한 메커니즘을 가지고 있습니다 . Swing과 AWT의 가장 분명한 차이점은 인터페이스 구성 요소의 모양이 다른 플랫폼에서 동일한 프로그램을 실행하는 것입니다. 그러나 스윙 기반 애플리케이션은 모든 플랫폼에서 동일한 모양과 스타일을 가질 수 있습니다.
스윙 클래스는 AWT에서 상속되며 일부 스윙 클래스는 해당 클래스를 AWT의 직접 확장합니다. 예를 들어, Japplet, Jdialog, Jframe 및 Jwindow.
스윙을 사용하여 그래픽 인터페이스를 설계하면 두 가지 주요 패키지가 소개됩니다.
스윙이 너무 풍부하기 때문에 교과서에 스윙을 포괄적으로 소개하는 것은 불가능하지만,이 장에서 소개 된 스윙에 대한 지식은 독자들이 매우 절묘한 GUI 프로그램을 작성할 수 있도록 충분합니다.
구성 요소 및 컨테이너
구성 요소는 버튼과 같이 사용자가 직접 작동 할 수있는 그래픽 인터페이스의 기본 요소입니다. 컨테이너는 그래픽 인터페이스의 복합 요소이며 컨테이너에는 패널과 같은 구성 요소가 포함될 수 있습니다.
Java 언어는 각 구성 요소에 대한 사전 정의 된 클래스 및 프로그램은 다양한 구성 요소 객체를 전달하거나 서브 클래스를 전달합니다. 버튼입니다. Java 언어는 또한 각 컨테이너에 대한 클래스를 사전 정의했으며 프로그램은 해당 컨테이너 또는 하위 클래스를 통해 다양한 컨테이너 객체를 만듭니다. 예를 들어, Swing의 사전 정의 된 창 클래스 JFrame은 컨테이너 클래스이며 프로그램에서 생성 된 JFrame 또는 JFrame 서브 클래스의 객체는 창입니다.
구성 요소와 컨테이너를 통합 방식으로 관리하기 위해 모든 구성 요소 클래스에 대해 슈퍼 클래스가 정의되며 구성 요소의 공통 작업은 구성 요소 클래스에 정의됩니다. 마찬가지로 모든 컨테이너 클래스의 슈퍼 클래스 컨테이너 클래스를 정의하고 컨테이너 클래스에서 컨테이너의 공유 작업을 정의하십시오. 예를 들어, add () 메소드는 컨테이너 클래스에 정의됩니다.
구성 요소, 컨테이너 및 그래픽 클래스는 AWT 라이브러리의 주요 클래스입니다. 계층 적 수준으로 복잡한 그래픽 인터페이스를 구성하기 위해 컨테이너는 다른 컨테이너에 배치 할 수있는 특수 구성 요소로 처리됩니다. 예를 들어, 두 개의 패널로 여러 버튼과 텍스트 상자를 별도로 분리 한 다음이 두 패널과 다른 버튼을 창에 넣습니다. 계층 적으로 인터페이스를 구성하는이 방법은 복잡한 사용자 인터페이스를 점진적인 방식으로 구성 할 수 있습니다.
이벤트 드라이버 디자인의 기본 사항
1. 이벤트, 모니터 및 모니터 등록 <그래픽 인터페이스의 이벤트는 구성 요소에서 발생하는 사용자 작업을 나타냅니다. 예를 들어, 사용자가 인터페이스에서 버튼을 클릭하면이 버튼에서 이벤트가 발생하고 버튼 객체가 이벤트의 트리거임을 의미합니다. 이벤트를 모니터링하는 객체를 모니터라고하며 모니터는 이벤트를 처리하는 방법을 제공합니다. 모니터를 이벤트 객체와 연결하려면 이벤트 객체를 등록하려면 시스템에 이벤트 객체의 모니터를 알려야합니다.
프로그램을 사용하면 버튼 이벤트에 응답하면 프로그램은 버튼 객체를 만들고 인터페이스에 추가하고 버튼을 모니터로 등록하려고 프로그램에 버튼 이벤트에 응답 할 수있는 방법이 필요합니다. "클릭 버튼"이벤트가 발생하면 시스템은이 버튼에 등록 된 이벤트 처리 방법을 호출하여 버튼 이벤트 처리 작업을 완료합니다.
2. 이벤트 처리의 사명을 실현하십시오
Java 언어로 이벤트 핸들러를 작성하기위한 두 가지 주요 솔루션이 있습니다. 하나는 handleEvent (EventEvt)를 재설정하는 것이며,이 솔루션을 사용하는 프로그램은 약간 더 많은 워크로드입니다. Java는 이벤트 유형에 따라 여러 인터페이스를 제공하며 해당 인터페이스, 즉 이벤트에 응답하는 메소드를 구현해야합니다. 이벤트가 발생하면 시스템의 내장 핸들 이벤트 (Event EVT) 메소드는 자동으로 모니터 클래스에서 구현 된 이벤트에 응답하기 위해 방법을 자동으로 호출합니다.
Java.awt.event 패키지에 사용되는 모델에는 이벤트를 감지하고 반응하는 모델에는 다음 세 가지 구성 요소가 포함됩니다.
소스 개체 : 이벤트의 구성 요소 "발생"에서는 이벤트를 "듣는"객체 그룹과 접촉합니다.
모니터 객체 : 사전 정의 된 인터페이스를 구현하는 클래스의 객체는 이벤트 발생을 처리하는 방법을 제공합니다.
이벤트 개체 : 이벤트가 발생할 때 소스에서 모니터로 전달 된 특정 이벤트를 설명하는 정보가 포함되어 있습니다.
이벤트 드라이버가 소스 객체 및 모니터 객체를 작성하는 것 외에도 이벤트 드라이버가 수행하려는 작업 모니터는 소스 객체를 이해하거나 소스 개체에 모니터를 등록하도록 배열해야합니다. 각 소스 객체에는 등록 된 모니터 목록이있어 해당 목록에 모니터 객체를 추가하는 방법을 제공합니다. 시스템은 소스 객체가 모니터를 등록한 후에 만 소스 객체에서 발생하는 이벤트의 모니터 객체에 알립니다.
3. 이벤트 유형 및 모니터 모니터 인터페이스 <br /> Java 언어로 시스템을 용이하게하고 프로그램이 모니터를 등록하도록 촉진하기 위해 시스템은 이벤트 유형이라고하는 이벤트를 분류합니다. 시스템은 각 이벤트 유형에 대한 인터페이스를 제공합니다. 모니터 객체가되는 클래스는 해당 인터페이스를 구현하고 인터페이스에서 지정된 이벤트에 응답하는 방법을 제공해야합니다.
프로그램 응답 버튼 이벤트를 예로 들어 JBUTTON 클래스 객체 버튼이 이벤트의 개시자가 될 수 있습니다. 사용자가 인터페이스의 버튼에 해당하는 버튼을 클릭하면 버튼 객체는 ActionEvent 유형의 이벤트를 생성합니다. 모니터 객체가 OBJ이고 클래스 OBJ가 OBJ 인 경우, 클래스 OBJ는 ACTION 리스트너 인터페이스를 구현하여 ActionPerformed 버튼 이벤트를 구현해야합니다. 버튼 객체는 AddActionListener 메소드를 사용하여 모니터 OBJ를 등록해야합니다.
프로그램이 실행될 때 사용자가 버튼 객체에 해당하는 버튼을 클릭하면 시스템은 이벤트 객체에서 모니터로 ActionEvent 객체를 전달합니다. ActionEvent 객체에는 이벤트가 발생하는 버튼 및 이벤트에 대한 기타 정보를 포함한 정보가 포함되어 있습니다.
다음 표는 이러한 이벤트를 생성하는 일부 대표적인 이벤트 유형 및 일부 스윙 구성 요소를 보여줍니다. 실제 이벤트가 발생하면 일반적으로 일련의 이벤트가 발생합니다. 예를 들어, 사용자가 버튼을 클릭하면 Cursor가 버튼을 눌러야합니다. ActionEvent 이벤트는 마우스가 릴리스되었지만 커서가 여전히 버튼에 있으며 마지막으로 Cursor가 버튼을 남겼 음을 나타냅니다. 그러나 응용 프로그램은 일반적으로 버튼을 누르는 전체 조치의 단일 ActionEvent 이벤트 만 처리합니다.
각 이벤트 유형에는 해당 모니터 인터페이스가 있으며 표 11-2는 각 인터페이스의 메소드를 나열합니다. 모니터 인터페이스를 구현하는 클래스는 인터페이스에 정의 된 모든 방법을 구현해야합니다.