그래픽 노트를 프로그래밍 자바 기초 지식 -11_1-

그래픽 노트를 프로그래밍 자바 기초 지식 -11_1-

11_1 그래픽 프로그래밍

1 스윙 개요

이제, 스윙은 같은 GUI 툴킷과 같은 공식적인 이름을 기반으로하지 않습니다. 그것은 (자바 파운데이션 클래스, JFC) 인 자바 기반 클래스의 일부가되었습니다. 전체 JFC는 거기에 GUI 툴킷을 스윙 포함 된 내용보다 훨씬 더 큰, 매우 큽니다.

스윙 JFC뿐만 아니라 특징적인 구성 요소가 포함되어 있습니다뿐만 아니라 접근성에게 API, 2 차원 API와 드래그 API가 포함되어 있습니다.

참고 : 스윙이 완전히 AWT를 대체하지만, AWT 아키텍처를 기반으로하지 않습니다. 스윙 기능 만 더 강력한 사용자 인터페이스 구성 요소를 제공합니다. 특히 스윙의 제조에 사용 된 절차에, AWT는 기본 사무실 사용할 필요가
관리 이벤트를. 지금부터, 스윙 "그려"사용자 인터페이스 클래스이며, AWT 이벤트가이 창 도구 상자를 기본 메커니즘을 처리라고 말합니다.

물론, 디스플레이 요소 스윙 기반의 사용자 인터페이스는 사용자의 화면에 AWT 느린 속도의 디스플레이 조립품이 아닌 다른 기준으로합니다. 과거의 경험을 감안할 때, 현대 컴퓨터의 어느 속도에서 약간의 차이는 어쨌든 질병을 유발한다. 또한, 때문에 다음 사항 저항에, 사람들은 스윙을 선택합니다 :

  • 스윙 컬렉션의 풍부하고 편리한 사용자 인터페이스 요소를 가지고있다.
  • 따라 기본 플랫폼, 그래서 몇 가지 플랫폼 고유의 버그에 대한 작은 스윙.
  • 사용자에게 일관된 다른 플랫폼의 느낌을주고 스윙.

그러나, 제 3 점은 위, 잠재적 인 문제가있다 : 사용자 인터페이스 요소는 모든 플랫폼에서 같은 모양, 그렇다면 서로 다른 지역 통제 될 가능성이 있으며,이 플랫폼의 사용자는이 익숙하지 않을 수 있습니다.

스윙이 문제를 해결하기 위해 매우 영리한 방법을 사용합니다. 스윙 프로그래머를 작성할 때, 당신은 특별한 프로그램은 "모양과 느낌"을 지정할 수 있습니다.

또한, 썬은 플랫폼 독립적 인 인식의 금속이라고를 개발했다. 이제 시장 사람들이이 "자바 모양과 느낌"이라고합니다. 그러나 프로그래머의 대다수는 금속 용어를 계속,이 책은 소위됩니다.

일부 비평가 조금 투박한 금속,하지만 자바 SE 5.0하지만, 새로운 브랜드를 보인다 (그림 10-3 참조). 이제, 금속 외관은 각각의 테마 색상과 글꼴은 작은 변화에게있다, 다양한 주제를 지원합니다. 기본 테마는 자바 SE 6에서 오셔라고 썬은 Windows와 GTK 기본 모양에 대한 지원을 개선하고 생각합니다. 스윙 응용 프로그램은 개인의 색상 테마를 지원, 동적 버튼과 스크롤 막대와 실제 성능은 매우 유행이된다.

2 프레임을 만들기

자바에서 최상위 창 (윈도우가 다른 윈도우에 포함되지 않음)의 프레임 (프레임)이라고합니다. AWT 라이브러리의 클래스라는 프레임 톱 레벨의 윈도우를 설명하기 위해이 사용된다. 이 클래스의 스윙 버전은이 클래스를 프레임을 확장, JFrame의라고합니다. JFrame의 캔버스 스윙 구성 요소에 그려진하지 않는 거의 중 하나입니다. 따라서, 사용자의 윈도우 시스템에 의해 그려진 구성 요소 (버튼, 제목 표시 줄, 아이콘 등)을 수정하기보다는 스윙에 의해 그려집니다.

경고 : 대부분의 Swing 컴퍼넌트 클래스의 모든 예를 들어, "J"로 시작하는 JButton, 등등 JFrame의합니다. 이러한 클래스는 자바에서 버튼과 프레임을 가지고 있지만 구성 요소를 AWT에 속한다. 실수로 "J"를 작성하는 것을 잊지 경우, 프로그램은 여전히 ​​컴파일 및 실행되지만 일관성 시각 및 동작이 발생합니다 스윙과 AWT 구성 요소를 사용하여 함께 혼합 될 수있다.

이 섹션에서, JFrame의 스윙에 기재된 일반적인 방법에 관한. 목록 10-1 화면에 빈 프레임을 표시하는 간단한 프로그램을 보여줍니다

//程序清单10-1 simpleframe/SimpleFrameTest.java
package simpleFrame;
import java.awt.*;
import javax.swing.*;
* ©version 1.33 2015-05-12
* author Cay Horstmann

public class SimpleFrameTest {
    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
                SimpleFrame frame = new SimpleFrame();
                frame.setDefault(CloseOperationJFrame.EXIT_0N_CL0SE);
                frame.setVisible(true);
            });
    }
}
class SimpleFrame extends JFrame {
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 200;
    public SimpleFrame() {
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }
}

라인별로 다음 줄은 프로그램을 설명합니다.

javax.swing의 패키지에있는 스윙 클래스입니다. javax의 패키지 이름이 자바 확장 패키지보다는 핵심 패키지 있음을 나타냅니다. 역사적인 이유로 클래스가 확장으로 간주됩니다 스윙. 그러나 버전 1.2에서, 각각의 Java SE의 구현을 포함하고있다.

기본적으로 프레임 크기는 0x0으로 픽셀, 실질적인 의미가없는이 프레임 워크입니다. 여기 SimpleFmme 서브 클래스 정의는 생성자는 프레임 크기는 300 X 200 픽셀로 설정된다. 이 SimpleFrame와 JFrame의 사이의 유일한 차이입니다.

주요 방법 SimpleFrameTest 클래스에서, 우리는 SimpleFrame 객체가 볼 수 있도록하는 것입니다 구성.

각 프로그램에 스윙, 그것을 강조해야 할 두 가지 기술적 인 문제가있다.

첫째, 모든 스윙 컴포넌트는 스레드 (이벤트 발송 쓰레드)을 파견해야하는 사용자 인터페이스 구성 요소로 제어를 전송합니다 경우, 마우스 클릭 버튼 스레드에 의해 구성됩니다. 다음 코드 조각은 이벤트 발송 쓰레드에서 실행된다 :

EventQueue.invokeLater(() -> {
    statements
});

내용은 제 14 장에서 자세히 논의 될 것이다. 이제, 단순히 마법의 스윙 프로그램 코드로 시작합니다.

다음에, 응답 동작의 정의시, 사용자는 상기 프레임을 닫는다. 이 프로그램의 경우에만 프로그램이 단순히 종료 할 수 있습니다. 문에 응답하여이 작업을 선택합니다 frame.setDefaultCloseOperation(JFrame. EXIT_0N_CL0SE);

사용자가 내부 프레임을 닫을 때, 복수의 프레임을 포함하는 프로그램은 프로그램 종료 할 수 없다. 사용자가 윈도우 프레임은 숨길 닫지 만 프로그램이 종료되지 않은 경우 기본적으로 (마지막 프레임이 표시되지 후, 다음 프로그램이 종료 스윙 경우 작업 아니지만,이 치료는 적절하다).

간단한 프레임 워크 구조는 자동으로 프레임이 처음에는 보이지 않는, 표시되지 않습니다. 이것은 프로그래머 프레임 워크의 추가 구성 요소의 첫 공연에 갈 수있는 기회를 제공합니다. 프레임 워크를 보여주기 위해, 주요 방법은로 setVisible 방법 프레임 워크를 호출 할 필요가있다.

초기화 문 후, 주요 방법은 종료됩니다. 주요 종료가 프로그램을 종료하지 않은, 언급하지만, 메인 스레드가 종료되어야한다. 당신이 프레임을 닫거나 프로그램을 종료하는 System.exit 메소드를 호출 할 때까지 스레드를 파견 이벤트는 활성 프로그램을 남아있다.

10-1 실행 목록의 결과는 그림 10-5에 표시, 그냥 아주 지루한 톱 레벨 윈도우입니다. 이 그림에서 볼 수, 제목 표시 줄 및 프레임 장식은 운영 체제보다는 스윙 라이브러리에 의해 그려집니다 (예를 들어, 모서리의 창 크기를 재설정). 윈도우, GTK 또는 Mac에서 동일한 프로그램이 실행은 다른 장식 프레임을 얻을. 스윙 라이브러리는 프레임 워크 내에서 모든 그리기에 대한 책임이 있습니다. 이 프로그램에서는 단지 프레임은 기본 배경색으로 채워집니다.

참고 : 위해 호출 할 수 frame.setUndecorated(true)있는 모든 장식 액자를 끄

3 프레임 위치

슈퍼 클래스는 숫자 다음과 같다 프레임 크기와 가장 중요한 위치를 처리하는 데 사용되는 많은 방법을 상속 :

  • 는 setLocation setBounds 프레임의 위치를 ​​설정하기위한 방법.
  • 하여 윈도우 제목 표시 줄에 표시되는 아이콘 시스템, 작업 전환 창을 다른 위치를 알려주는 데 사용 setlconlmage.
  • setTitle이라는 제목 표시 줄 텍스트를 변경하는 데 사용됩니다.
  • setResizable 프레임의 크기가 사용자가 변경할 수 있는지 여부를 결정 부울을 사용.

그림 10-6은 상속 계층 구조 JFrame의 클래스를 보여줍니다.

    Object
       |
       |
    Component
       |
       |
    Container
       |
       |
JComponent  Windows
    |          |
    |          |
JPanel      Frame
           |
           |
        JFrame

구성 요소 클래스와 Window 클래스 (프레임은 슈퍼 클래스입니다)주의 깊게 연구하고 찾을 수있는 스케일링 방법의 틀을 변경해야합니다 (그것은 모든 GUI 객체의 조상이다). 예를 들어, 컴포넌트 클래스는 setLocation 방법은 재 위치 조립하는 방법이다. 호출이 있으면 setLocation(x, y)윈도우의 상부 좌측 코너의 위치에 배치되고, 수평 화소가 화면의 좌측 상단에 수직 픽셀 y 좌표 (0,0) X.

마찬가지로, setBounds 구성 방법은 예를 들면, 단일 단계의 웨이트 위치 설정 조립체 (특히 JFrame의) 크기 및 위치로 구현 될 수있다 :

setBounds(x, y, width, height);

디스플레이 창 전에 호출하면 윈도우 시스템, 제어 창 위치를 수

setLocationByPlatform(true);

윈도우가 윈도우 (크기 아님)의 위치를 ​​선택한다 전형적 오프셋 작은 창의 표시 위치에서 마지막.

참고 : 프레임이 들어에서 setLocation 전체 화면에 따라서 상대 좌표 setBounds. 용기에 함유되는 성분의 좌표 라 12 장을 참조한다 용기에 대해이다.

3.1 프레임 속성

상기 방법을 기반으로 많은 수집 컴포넌트 클래스 / 방법의 형태로 제공되고, 예를 들면, 프레임의 클래스 다음 방법

public String getTitle();
public void setTitle(String title);

취득하는 속성을 설정하는 그러한 방법이 언급된다. 속성 속성 이름과 유형이 포함되어 있습니다. 첫 글자를 소문자 후 얻을 수 또는 세트는 해당 속성의 이름을 지정할 수 있습니다. 예를 들어, 프레임 String 클래스 유형 및 제목라는 속성이 있습니다.

개념적으로, 타이틀은 프레임의 속성이다. 이 속성을 설정하는 경우,이 제목은 사용자의 화면에 표시를 변경할 수 있기를 바랍니다. 속성 값을 반환 희망, 재산을 취득 할 때 설정되었습니다.

우리는 프레임 클래스는이 속성의 구현 방법을 알고 (또는 관심)하지 않습니다. 아마도 단순히 피어 스토리지 프레임 제목을 사용합니다. 아마도 인스턴스 도메인이 있습니다 :

private String title; // not required for property

클래스가 인스턴스 필드와 일치하지 않는 경우에, 우리는 알고있다 (또는 관리)를 얻는 방법과 설정 방법을하지 않습니다. 아마도 그냥 읽기 필드를 작성하고 예, 아마도 많은 다른 작업을 수행 할 수 있습니다. 예를 들어, 제목이 변경 될 때, 시스템은 창을 알립니다.

한 가지 예외 GET / SET 규칙의 경우 : 방법은 유형 부울 속성에 대해 처음으로 인수했다. 예를 들어, 다음과 같은 두 가지 방법 위해서는, locationByPlatform 속성을 정의 :

public boolean islocationByPIatforn()
public void setLocationByPIatforra(boolean b)

도 4는 조립 정보를 도시

메시지 문자열은 프레임에 직접 그릴 수 있지만, 이것은 좋은 프로그래밍 방법이 아닙니다. 자바에서, 프레임은 메뉴 바를 수 있고, 컨테이너 조립체를 유지하기위한, 다른 사용자 인터페이스 요소가 내부에 배치된다. 정상적인 상황에서, 정보는 다른 구성 요소에 그려 져야하고,이 구성 요소는 프레임 워크에 추가된다.

꽤 복잡한 구조를 JFrame의. JFrame의도 10-8의 구조를 나타낸다. 볼 수있는 네 개의 패널 JFrame의가 있습니다. 루트 패널 중 하나는, 패널 및 유리 패널 수준의 사람들은 걱정하지 않는다, 그들은 도구 모음과 컨텐츠 구획을 구성하고 외관을 위해 사용된다.

스윙 프로그래머는 콘텐츠 창 (의 contentPane) 약 가장 우려하고있다. 프레임의 디자인에 콘텐츠 창에 모든 구성 요소를 추가하려면 다음 코드를 사용하는 경우 :

Container contentPane = frame.getContentPane() ;
Component c = ...;
contentPane.add(c) ;

1.4 및 Java SE 이전 버전의 JFrame의 클래스 메소드가 예외 메시지를 던졌습니다 추가 “Do not use JFrame.add().Use JFrame.getContentPane().add instead”. 오늘, JFrame.add 방법은 더 이상 표시되지 않습니다

이 메시지는 단순히 컨텐츠 창을 추가 할 전화, 그래서 당신은 직접 호출 할 수 있습니다

frame.add(c) ;

여기서 의도 한 도면 조립체는 메시지 프레임에 추가된다. 도면 조립체 확장 JAComponent 클래스를 정의하고, 상기 방법은 상기 커버의 paintComponent한다.

그래픽의 paintComponent 방법은, 예를 들어 텍스트 및 이미지를 드로잉 제공된 현재의 폰트 색 세트 또는 유지하는 유형 파라미터를 갖는다. 이 방법은 드로잉 패턴, 이미지, 텍스트를 포함하는 자바에서, 모든 도면은 그래픽 객체한다.

추천

출처www.cnblogs.com/whatsabc/p/11520901.html