|
MID 프로필 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--javax.microedition.lcdui.Item | +--javax.microedition.lcdui.CustomItem
CustomItem은 새로운 시각적 요소 및 대화식 요소를
Forms
에 도입하기 위해 클래스 세분화를 통해
사용자 정의할 수 있습니다. 서브 클래스는 크기 조정과 렌더링 및 색, 글꼴,
그래픽 선택을 비롯한 시각적 모양을 담당합니다.
서브 클래스는 키, 포인터 작업 및 순회 작업으로 생성된 이벤트에 응답하여
사용자 상호 작용 모드를 담당합니다.
마지막으로 서브 클래스는 CustomItem
값이 변경된
수신기의 알림을 트리거하기 위해 Item.notifyStateChanged()
호출을
담당합니다.
다른 Item
과
마찬가지로 CustomItem
에는
최소 및 기본 크기의 개념이 있습니다.
이는 내용, 레이블, 경계 등의
공간을 포함하는 Item
의
전체 영역과 관련됩니다. Item
의 영역 및 크기에 대한
자세한 내용은 항목 크기를 참조하십시오.
또한 CustomItem
서브 클래스에는
CustomItem
의 컨텐트 영역 크기인 내용
크기의 개념이 있습니다. 컨텐트 영역은
CustomItem
이
차지하는 전체 영역 내의 직사각형 영역입니다.
컨텐트 영역은 CustomItem
서브 클래스가
입력 이벤트를 그리고 수신하는 영역입니다.
여기에는 레이블과 경계에 사용되는 공간은 포함되어 있지 않습니다.
구현 시 컨텐트 영역을 벗어난 Item
의 영역 내에서
입력 이벤트를 레이아웃하고 그리며 처리합니다.
구현과 CustomItem
서브 클래스 간에
전달된 모든 좌표는
(0,0)
에 있는 이 영역의
왼쪽 위 모서리와 함께 항목의
컨텐트 영역에 상대적입니다.
getMinContentHeight
,
getMinContentWidth
,
getPrefContentHeight
,
getPrefContentWidth
및
sizeChanged
메소드를 사용하여 구현과
CustomItem
서브 클래스
사이에 전달된 크기 정보는 모두 컨텐트 영역의 크기를 참조합니다.
구현 시 항목 크기 메소드
Item.getMinimumHeight
,
Item.getMinimumWidth
,
Item.getPreferredHeight
및
Item.getPreferredWidth
에서 보고하는 대로 Item
의 전체 영역 크기와 컨텐트 영역 크기 간의 차이를 계산하고 유지합니다.
구현 시 CustomItem
에서 반환하는
크기 정보가 사용자 인터페이스 정책에 의해 부과된 제한을
초과하는 경우 무시합니다. 이 경우 구현 시에는
sizeChanged
와
paint
메소드를 통해 CustomItem
에 부여된
실제 크기를 항상 보고해야 합니다.
예를 들어, 구현 시 Item
이 화면보다 더 커지지 않도록 하는
경우에 이러한 상황이 발생할 수 있습니다.
CustomItem
서브 클래스 코드가
CustomItem
을
화면보다 크게 만드는 getMinContentWidth
에서 값을
반환하는 경우 구현 시 getMinContentWidth
에서
반환된 최소 너비보다 더 좁은 너비를 할당할 수 있습니다.
구현 시 다른 CustomItem
메소드와
관련된 순서로 CustomItem
의 내용 크기 메소드
getMinContentHeight
,
getMinContentWidth
,
getPrefContentHeight
및
getPrefContentWidth
를
호출할 수 있습니다.
이러한 모든 메소드에 대해 CustomItem
서브 클래스 코드는 현재 CustomItem
의 내용과
일치하는 값을 반환해야 합니다.
내용이 변경되면 CustomItem
서브 클래스 코드가
단순히 내용 크기 메소드에서 다양한 값을 반환하기 시작하기에
충분하지 않습니다.
대신 내용이 변경될 때마다 서브 클래스 코드는
invalidate
메소드를 호출해야 합니다.
이는 구현에 레이아웃 계산을 수행해야 할 수 있음을 알려 구현 시 CustomItem
의 새 내용을 기반으로 새 값을 얻기 위한 내용 크기 메소드를 호출합니다.
CustomItem
클래스는 많은 항목에서
적당한 편집을 허용하지만 가능한 상호 작용을 모두 허용하지는 않습니다.
융통성에 대한 요구는 쉽게 마스터할 수 있는
단순한 API를 만드는 것에 대한
요구 사항과 상호 운용성을 저해하지 않으면서도
플랫폼별로 모양 및
색감의 변화를 허용할 필요성과 함께 균형을 이루고 있습니다.
일반적인 개념은 여러 상호 작용 "모드"가 있어
Form
구현 시 지원하는 내용을 전달할 수 있도록
하는 것입니다. 그런 다음 CustomItem
에서
하나 이상의 상호 작용 모드를 지원하도록 선택할 수 있습니다.
CustomItem
에서
모든 상호 작용 모드를 조합하여 구현할 때
필요한 요구 사항은 없습니다.
일반적으로 CustomItem
은
특정 상호 작용 모드에 의존하는 고도의 대화식 접근 이외에도
모든 플랫폼에서 작동하는 접근 방법(예: 아래에 설명된 별도의
화면 편집 기술)을 구현합니다. 런타임 시 CustomItem
코드는 이 상호 작용 모드를 지원할 것인지 여부를 결정하기 위해
시스템에 쿼리할 수 있습니다.
지원하는 경우 CustomItem
은 이
상호 작용 모드를 사용할 수 있으며 지원하지 않는 경우
모든 플랫폼에서 작동하는 방법으로 폴백합니다.
CustomItem
은 항상 항목 명령을 사용하여
별도의 편집 화면을 호출할 수 있으며, 구분되는 상태 수가 적은
구성 요소는 상태를 변경한 다음
notifyStateChanged
알림을
발생시켜 간단히 응답할 수 있습니다.
별도의 편집 화면을 사용하기 위한 기술로는
다른 Displayable
객체(예: List)에 값을 로드한
다음 여기에서 Display.setCurrent(Displayable)
를 호출하는 것이
있습니다. 사용자가 이 값의 편집이
완료되었음을 알리기 위해
명령(예: "OK")을 실행하면
수신기는 해당 Displayable
객체에서 값을 검색한 다음
이 항목을 반환하기 위해
Display.setCurrentItem(Item)
을
호출합니다.
구현 시 키패드 이벤트를
CustomItem
에
전달하는 기능을 선택적으로 지원할 수 있습니다.
구현 시에는 getInteractionModes
에서 반환하는 값의
KEY_PRESS
,
KEY_RELEASE
및
KEY_REPEAT
비트를 설정하여 지원 수준을 나타냅니다.
이러한 비트에 해당하는 이벤트는
keyPressed()
,
keyReleased()
및
keyRepeated()
메소드
각각에 대한 호출을 통해 전달됩니다.
구현 시 KEY_RELEASE
이벤트를 지원하면
KEY_PRESS
이벤트도 지원해야 합니다.
구현 시 KEY_REPEAT
이벤트를 지원하면
KEY_PRESS
및
KEY_RELEASE
이벤트도 지원해야 합니다.
지원되는 경우 KEY_RELEASE
이벤트는
보통 해당 KEY_PRESS
이벤트가 수신된 다음에 발생하며
KEY_REPEAT
이벤트는 보통
KEY_PRESS
와 KEY_RELEASE
이벤트 사이에서 발생합니다. 하지만 CustomItem
이
표시될 때 키를 누르면 해당 KEY_PRESS
가 없어도
CustomItem
은 KEY_RELEASE
나
KEY_REPEAT
이벤트를 수신할 수 있습니다.
이벤트가 발생한 키를 나타내기 위해 키 이벤트 메소드가
keyCode
에 전달됩니다.
구현 시 키 코드 Canvas.KEY_NUM0
에서
Canvas.KEY_NUM9
, Canvas.KEY_STAR
및 Canvas.KEY_POUND
를 사용하여 사용자가
이벤트를 생성할 수 있는 방법을 제공해야 합니다.
또한 구현 시 장치별 키를 포함하여
다른 키에 대한 키 이벤트도
전달할 수 있습니다. CustomItem
에 사용할 수 있는
키 집합은 명령이 추가되었는지
여부에 따라 달라질 수 있습니다.
응용 프로그램은 getGameAction
메소드를
사용하여 키 코드를 게임 작업에 매핑할 수 있습니다.
구현 시 CustomItem
에서
키 이벤트를 지원하는 경우
모든 게임 작업을 CustomItem
에서 사용할 수 있도록
충분한 키 코드 집합과 게임 작업에 대한 매핑을
제공해야 합니다.
CustomItem
에서 사용할 수 있는
키 집합과 키 이벤트는 Canvas
에서
사용할 수 있는 것에 따라
달라질 수 있습니다.
특히, 순회를 지원하는 시스템에서 시스템은
순회용 방향 키를 사용하고
이러한 키를 CustomItem
에
전달하지 않도록 선택할 수 있습니다.
CustomItem
의 키 코드와 게임 작업 사이의
매핑은 Canvas
의 매핑과 다를 수 있습니다.
키 코드와 게임 작업에 대한 자세한 내용은 Canvas
클래스에서 키 이벤트 및
게임 작업을
참조하십시오.
구현 시 선택적으로 CustomItem
에 포인터
이벤트(예: 스타일러스 탭) 전달을 지원할 수 있습니다.
구현 시 getInteractionModes
가 반환하는 값에서
POINTER_PRESS
,
POINTER_RELEASE
및 POINTER_DRAG
비트를 설정하여 지원 수준을 나타냅니다.
이러한 비트에 해당하는 이벤트는
pointerPressed()
,
pointerReleased()
,
pointerDragged()
메소드
각각에 대한 호출을 통해 전달됩니다.
구현 시 POINTER_RELEASE
이벤트를 지원하면
POINTER_PRESS
이벤트도 지원해야 합니다.
구현 시 POINTER_DRAG
이벤트를 지원하면
POINTER_PRESS
및
POINTER_RELEASE
이벤트도 지원해야 합니다.
지원되는 경우 POINTER_RELEASE
이벤트는
보통 해당 POINTER_PRESS
이벤트를 수신한 다음
발생하며 POINTER_DRAG
이벤트는
보통 POINTER_PRESS
와 POINTER_RELEASE
이벤트
사이에서 발생합니다.
하지만 CustomItem
이 표시될 때 포인터를 누르면 해당
POINTER_PRESS
가 없어도
CustomItem
은 POINTER_RELEASE
나
POINTER_DRAG
이벤트를 수신할 수 있습니다.
포인터 이벤트의 (x,y)
위치는
각 포인터 이벤트에 의해 보고됩니다.
이 위치는 CustomItem
의 좌표 시스템으로 표현되며
여기서 (0,0)
은 CustomItem
의
왼쪽 위 모서리입니다. 특정 상황에서 포인터 이벤트는
해당 항목의 범위를 벗어나서
발생할 수 있습니다.
구현 시 CustomItem
에 대한
내부 순회를 지원합니다.
즉, 구현 시 일시적으로 해당 항목에 순회를 위임합니다.
CustomItem
내부에 순회 위치가 하나만 있더라도
사용자가 항목을 순회할 때 특수화된 강조 표시, 애니메이션 등을
수행할 수 있도록 항목에 내부 순회 프로토콜을
지원하려 할 수 있습니다.
구현 시 getInteractionModes()
가
반환하는 값에서 TRAVERSE_HORIZONTAL
또는 TRAVERSE_VERTICAL
비트 중 하나나
두 가지 모두를 설정하여 CustomItem
에 대한
내부 순회 지원을 표시합니다. 이러한 비트 중
어느 하나도 설정되어 있지 않은 경우에는 구현 시
CustomItem
이 내부적으로 순회하는 것을
허용하지 않거나 구현 시 순회를 전혀 지원하지 않습니다.
구현 시 순회를 지원하지만
CustomItem
에 대한
내부 순회를 거부하는 경우
CustomItem
의 컨텐트 영역을
벗어나는 고유 강조 표시 기능을 제공합니다.
CustomItem
은 내부 순회를 전혀 지원하지 않아도 됩니다.
traverse
메소드에 대한 초기 호출에
false
를 반환하여 이를 수행할 수
있습니다(CustomItem
에서
이 메소드를 무시하지 않는
경우의 기본 동작). 이 경우
시스템은 사용자가 항목을 순회하여 통과할 수 있도록 조정해야 합니다.
특히 내부 순회의 발생 여부에 상관없이 해당 항목이 화면 높이를
초과하는 경우 시스템은 적절한 스크롤이
발생할 수 있도록 조정해야 합니다.
구현 시 순회 이벤트를 CustomItem
에
전달하는 기능을 지원하지 않더라도 키패드나 포인터 이벤트를
CustomItem
에 전달하는 기능을 지원할 수 있습니다.
구현 시 키패드나 포인터 이벤트를
CustomItem
에 전달하는 기능을 지원하는 경우
이러한 CustomItem
이
초기 traverse()
호출에 대해 false
를 반환하여 내부 순회를 거부했더라도
모든 CustomItem
에 대해 전달할 수 있는
방법을 제공해야 합니다. 이는 특정 항목이 내부 순회를
지원하지 않더라도 구현 시 해당 항목에 대한
초점 개념을 지원해야 한다는 것을
의미합니다.
항목이 내부 순회를 수행하는 데
필요한 동작 및 책임에 대한 전체 사양은
traverse
메소드 설명서를
참조하십시오.
각 항목의 시각적 모양은 레이블(구현 시 처리) 및 내용(서브 클래스에서 처리)으로 구성됩니다.
레이블은 해당 항목이 아닌 구현 담당입니다.
CustomItem
의 내용에 대해 할당된
화면 영역은 구현 시
CustomItem
레이블을
표시하기 위해 사용하는 영역과는 별도입니다.
구현 시 컨텐트 영역에 대하여 레이블 및 레이아웃의
렌더링을 제어합니다.
CustomItem
은
paint
메소드가 호출될 때마다 내용 그리기를 담당합니다.
포그라운드, 백그라운드, 강조 표시된 포그라운드,
강조 표시된 백그라운드, 경계선 및 강조 표시된 경계선 색은
Display.getColor(int)
에서
검색해야 합니다.
그러면 CustomItem
이 장치에서 제공한
다른 항목의 색 구성표와 일치합니다. CustomItem
은
고유의 강조 표시 상태와
강조 표시되지 않은 상태를 추적합니다.
사용된 글꼴은 Font.getFont(int)
에서 검색해야 합니다.
그러면 일관된 시각적 모양을 위해 장치의 다른 항목에서
사용한 글꼴과 일치시킬 수 있습니다.
Field Summary | |
protected static int |
KEY_PRESS
키 누르기 이벤트 지원을 나타내는 상호 작용 모드 비트. |
protected static int |
KEY_RELEASE
키 놓기 이벤트 지원을 나타내는 상호 작용 모드 비트. |
protected static int |
KEY_REPEAT
키 반복 이벤트 지원을 나타내는 상호 작용 모드 비트. |
protected static int |
NONE
순회가 이 항목 내에 들어갔거나 위치가 변경되었음을 알리고 이 순회 이벤트와 관련된 특정 방향이 없음을 알리는 순회 방향에 대한 값. |
protected static int |
POINTER_DRAG
포인트 끌기 이벤트 지원을 나타내는 상호 작용 모드 비트. |
protected static int |
POINTER_PRESS
포인트 누르기 이벤트 지원을 나타내는 상호 작용 모드 비트. |
protected static int |
POINTER_RELEASE
포인트 놓기 이벤트 지원을 나타내는 상호 작용 모드 비트. |
protected static int |
TRAVERSE_HORIZONTAL
CustomItem 에 대한 수평 내부 순회 지원을
나타내는 상호 작용 모드 비트.
|
protected static int |
TRAVERSE_VERTICAL
CustomItem 에 대한 수직 내부 순회 지원을
나타내는 상호 작용 모드 비트.
|
Fields inherited from class javax.microedition.lcdui.Item |
BUTTON, HYPERLINK, LAYOUT_2, LAYOUT_BOTTOM, LAYOUT_CENTER, LAYOUT_DEFAULT, LAYOUT_EXPAND, LAYOUT_LEFT, LAYOUT_NEWLINE_AFTER, LAYOUT_NEWLINE_BEFORE, LAYOUT_RIGHT, LAYOUT_SHRINK, LAYOUT_TOP, LAYOUT_VCENTER, LAYOUT_VEXPAND, LAYOUT_VSHRINK, PLAIN |
Constructor Summary | |
protected |
CustomItem(String label)
CustomItem 서브 클래스가
해당 레이블을 지정할 수 있게 하는 수퍼 클래스 구성자 |
Method Summary | |
int |
getGameAction(int keyCode)
장치의 지정된 키 코드와 관련된 게임 작업을 가져옵니다. |
protected int |
getInteractionModes()
사용 가능한 상호 작용 모드를 가져옵니다. |
protected abstract int |
getMinContentHeight()
컨텐트 영역의 최소 높이를 픽셀 단위로 반환하기 위해 서브 클래스에 의해 구현됩니다. |
protected abstract int |
getMinContentWidth()
컨텐트 영역의 최소 너비를 픽셀 단위로 반환하기 위해 서브 클래스에 의해 구현됩니다. |
protected abstract int |
getPrefContentHeight(int width)
컨텐트 영역의 기본 높이를 반환하기 위해 서브 클래스에 의해 구현됩니다. |
protected abstract int |
getPrefContentWidth(int height)
컨텐트 영역의 기본 너비를 픽셀 단위로 반환하기 위해 서브 클래스에 의해 구현됩니다. |
protected void |
hideNotify()
이전에는 부분이라도 표시되었지만 현재는 전혀 표시되지 않는 항목을 알리기 위해 시스템에서 호출합니다. |
protected void |
invalidate()
CustomItem 의 크기와 순회 위치를
업데이트해야 한다는 것을 알립니다.
|
protected void |
keyPressed(int keyCode)
키를 누를 때 시스템에서 호출합니다. |
protected void |
keyReleased(int keyCode)
키를 놓을 때 시스템에서 호출합니다. |
protected void |
keyRepeated(int keyCode)
키가 반복되면 시스템에서 호출합니다. |
protected abstract void |
paint(Graphics g,
int w,
int h)
컨테이너 내에서 항목을 렌더링하기 위해 서브 클래스에 의해 구현됩니다. |
protected void |
pointerDragged(int x,
int y)
항목 내에서 포인터 끌기 작업(예: 누르고 놓기 전의 펜 모션)이 발생하면 시스템에서 호출합니다. |
protected void |
pointerPressed(int x,
int y)
항목 내에서 포인터 내리기 작업(예: 펜 탭)이 발생하면 시스템에서 호출합니다. |
protected void |
pointerReleased(int x,
int y)
항목 내에서 포인터 내리기 작업이 발생한 다음 포인터 올리기 작업(예: 펜 리프트)이 발생하면 시스템에서 호출합니다. |
protected void |
repaint()
항목 다시 그리기를 요청하기 위해 서브 클래스 코드에 의해 호출됩니다. |
protected void |
repaint(int x,
int y,
int w,
int h)
항목의 지정된 직사각형 영역을 다시 그리도록 요청하기 위해 서브 클래스 코드에 의해 호출됩니다. |
protected void |
showNotify()
이전에는 완전히 표시되지 않았지만 현재 부분적으로 표시되는 항목을 알리기 위해 시스템에서 호출합니다. |
protected void |
sizeChanged(int w,
int h)
크기 변경 이벤트를 처리하기 위해 서브 클래스에 의해 구현됩니다. |
protected boolean |
traverse(int dir,
int viewportWidth,
int viewportHeight,
int[] visRect_inout)
순회가 항목 내에 들어갔거나 해당 항목 내에서 순회가 발생한 경우 시스템에 의해 호출됩니다. |
protected void |
traverseOut()
순회가 항목을 벗어나 발생하면 시스템에서 호출합니다. |
Methods inherited from class javax.microedition.lcdui.Item |
addCommand, getLabel, getLayout, getMinimumHeight, getMinimumWidth, getPreferredHeight, getPreferredWidth, notifyStateChanged, removeCommand, setDefaultCommand, setItemCommandListener, setLabel, setLayout, setPreferredSize |
Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected static final int TRAVERSE_HORIZONTAL
CustomItem
에 대한 수평 내부 순회 지원을
나타내는 상호 작용 모드 비트.
TRAVERSE_HORIZONTAL
의 값은 1
입니다.
getInteractionModes()
,
traverse(int, int, int, int[])
,
Constant Field Valuesprotected static final int TRAVERSE_VERTICAL
CustomItem
에 대한 수직 내부 순회 지원을
나타내는 상호 작용 모드 비트.
TRAVERSE_VERTICAL
의 값은 2
입니다.
getInteractionModes()
,
traverse(int, int, int, int[])
,
Constant Field Valuesprotected static final int KEY_PRESS
KEY_PRESS
의 값은 4
입니다.
getInteractionModes()
,
keyPressed(int)
,
Constant Field Valuesprotected static final int KEY_RELEASE
KEY_RELEASE
의 값은 8
입니다.
getInteractionModes()
,
keyReleased(int)
,
Constant Field Valuesprotected static final int KEY_REPEAT
KEY_REPEAT
의 값은 0x10
입니다.
getInteractionModes()
,
keyRepeated(int)
,
Constant Field Valuesprotected static final int POINTER_PRESS
POINTER_PRESS
의 값은 0x20
입니다.
getInteractionModes()
,
pointerPressed(int, int)
,
Constant Field Valuesprotected static final int POINTER_RELEASE
POINTER_RELEASE
의 값은 0x40
입니다.
getInteractionModes()
,
pointerReleased(int, int)
,
Constant Field Valuesprotected static final int POINTER_DRAG
POINTER_DRAG
의 값은 0x80
입니다.
getInteractionModes()
,
pointerDragged(int, int)
,
Constant Field Valuesprotected static final int NONE
NONE
의 값은 0
입니다.
traverse(int, int, int, int[])
,
Constant Field ValuesConstructor Detail |
protected CustomItem(String label)
CustomItem
서브 클래스가
해당 레이블을 지정할 수 있게 하는 수퍼 클래스 구성자
label
- CustomItem
의 레이블Method Detail |
protected final int getInteractionModes()
CustomItem
서브 클래스 코드에 의해 호출됩니다.
사용 가능한 모드는 시스템이 올바로 이동하기 위해
필요한 실제 장치의 하드웨어 키, 포인팅 장치의 존재 등,
여러 요인에 따라 달라질 수 있습니다.
자세한 내용은 상호 작용 모드를 참조하십시오.
이 메소드가 0
을 반환하는 경우에는
항목 명령을 통한 상호 작용만 사용할 수 있습니다.
protected abstract int getMinContentWidth()
sizeChanged
와 paint
메소드에서 보고됩니다.
protected abstract int getMinContentHeight()
sizeChanged
와 paint
메소드에서 보고됩니다.
protected abstract int getPrefContentWidth(int height)
height
매개 변수는 컨텐트 영역에 할당된 임시 높이입니다.
서브 클래스 코드는 기본 너비 계산에 이 값을 사용할 수 있습니다.
구현 시 높이에 임시 값을 할당하지 않은 경우 height
매개 변수는 -1이 됩니다.
그렇지 않고 응용 프로그램이 CustomItem
의
높이를 잠근 경우 또는 이 메소드 호출 시점에 컨테이너의
레이아웃 알고리즘이 임시 높이를 이미 계산한 경우
height
는 특정 값을 가집니다.
서브 클래스는 전달된 임시 높이나 반환된 기본 너비가 부여될 것이라고
가정하면 안 됩니다. 부여된 실제 크기는
sizeChanged
와
paint
메소드에서 보고됩니다.
height
- 임시 컨텐트 높이(픽셀 단위),
또는 임시 높이가 계산되지 않은 경우 -1
protected abstract int getPrefContentHeight(int width)
width
매개 변수는 컨텐트 영역에 할당된 임시 너비입니다.
서브 클래스 코드는 기본 높이를 계산할 때 이 값을 사용할 수 있습니다.
구현 시 너비에 임시 값을 할당하지 않은 경우 width
매개 변수는 -1이 됩니다.
그렇지 않고 응용 프로그램이 CustomItem
의
너비를 잠근 경우 또는 이 메소드 호출 시점에 컨테이너의
레이아웃 알고리즘이 임시 너비를 이미 계산한 경우
width
는 특정 값을 가집니다.
서브 클래스는 전달된 임시 너비나 반환된 기본 높이가
부여될 것이라고 가정하면 안 됩니다.
부여된 실제 크기는 sizeChanged
와
paint
메소드에서 보고됩니다.
width
- 임시 컨텐트 너비(픽셀 단위),
또는 임시 너비가 계산되지 않은 경우 -1
protected void sizeChanged(int w, int h)
CustomItem
의 컨텐트 영역 크기가 변경되면 시스템에서
이 메소드를 호출합니다.
CustomItem
이 디스플레이에 표시되는 동안
크기가 변경되면 자동 다시 그리기 요청을 트리거할 수 있습니다.
이 경우 paint
를 호출하기 전에
sizeChanged
에 대한 호출이 먼저 발생합니다.
CustomItem
이 더 작아졌는데
CustomItem
의 나머지 내용이 보존되어 있는 경우
구현 시 다시 그리기를 트리거하지 않도록 선택할 수 있습니다.
마찬가지로 CustomItem
이 더 커지면 구현 시
새 영역에 대해서만 다시 그리기를 트리거하도록 선택할 수 있습니다.
두 경우 모두 보존된 내용이 CustomItem
의 원점에 대해
고정된 상태로 있어야 합니다. 크기 변경이 CustomItem
내용에 있어 중요한 경우 응용 프로그램은 변경된 영역에 대해
다시 그리기 요청을 명시적으로 실행해야 합니다.
응용 프로그램의 다시 그리기 요청은
이미 보류 중인 다시 그리기
요청과 합쳐질 수 있으므로 다시 그리기를
여러 번 발생시키면 안 됩니다.
항목의 컨텐트 영역이 표시되지 않은 상태에서 크기가 변경되면
이 메소드에 대한 호출이 지연될 수 있습니다.
항목이 표시되지 않은 상태에서 크기가 변경된 경우
항목이 다시 표시될 때까지 sizeChanged
가
한 번 이상 호출됩니다.
이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
w
- 항목 컨텐트 영역의 새 너비h
- 항목 컨텐트 영역의 새 높이protected final void invalidate()
CustomItem
의 크기와 순회 위치를
업데이트해야 한다는 것을 알립니다.
이 메소드는 구현 시
CustomItem
컨텐트 영역의
크기나 내부 순회 위치를 변경해야 할 수 있다는 것을 알리기 위해
CustomItem
서브 클래스 코드에 의해 호출됩니다.
이는 CustomItem
의
내용이 수정될 때 자주 발생합니다. 이 메소드에 대한 호출은 즉시 결과를 반환하며
컨테이너 레이아웃 알고리즘이 향후의 특정 시점에 실행되도록 하므로
getMinContentHeight
,
getMinContentWidth
,
getPrefContentHeight
,
getPrefContentWidth
,
sizeChanged
나
traverse
에 대한 호출이 발생할 수 있습니다.
레이아웃 작업의 결과로 다시 그리기가 필요한 경우
paint
메소드도 호출될 수 있습니다.
CustomItem
이 표시되지 않은 상태에서
컨텐트 크기가 무효화된 경우 해당 레이아웃 작업이 지연될 수 있습니다.
invalidate
가 호출될 때
CustomItem
에 현재 순회 위치가 포함되어 있는 경우
traverse
메소드가 호출됩니다.
protected abstract void paint(Graphics g, int w, int h)
Graphics
컨텍스트 대상은
이 CustomItem
(또는 이 항목에 대한 백 버퍼)의
컨텐트 영역입니다.
컨텐트 영역의 왼쪽 위 모서리가
(0,0)
에 오도록 Translation이 설정되며
클립은 그려지는 영역으로 설정됩니다.
응용 프로그램은 지정된 클립 영역 내의 모든 픽셀을 그려야 합니다.
항목은 클립 영역을 수정할 수 있지만 시스템은
항목의 컨텐트 영역 범위를 벗어나는 그리기 수정은 허용하지 말아야 합니다.
전달된 w
와 h
는 항목 컨텐트 영역의
너비와 높이입니다. 편의상 여기에 전달된 값은
sizeChanged()
에 대한 최신 호출로 전달된 값과 항상 같습니다.
Graphics
객체의 다른 값은 다음과 같습니다.
Font.getDefaultFont()
에서 반환된 글꼴과 같습니다.SOLID
입니다.이 항목에 대한 showNotify()
호출
다음 및 이 항목에 대한 후속 hideNotify()
호출 이전,
즉, 항목의 한 부분 이상이 실제로 디스플레이에서 표시될 때만
paint()
메소드가 호출됩니다.
그리고 항목의 너비와 높이가 모두 0보다 큰 경우에만
paint()
메소드가 호출됩니다.
g
- 항목 렌더링에 사용될
Graphics
객체w
- 항목의 현재 너비(픽셀 단위)h
- 항목의 현재 높이(픽셀 단위)protected final void repaint()
CustomItem
이 표시될 때 paint()
에 대한
호출이 발생합니다. 항목의 내부 상태가 업데이트되어 해당 시각적 표현을
업데이트해야 하는 경우 CustomItem
서브 클래스에서
이 메소드를 호출해야 합니다.
protected final void repaint(int x, int y, int w, int h)
paint
에 대한
호출이 발생합니다.
해당 영역은 CustomItem
의 컨텐트 영역에
상대적으로 지정됩니다.
항목의 내부 상태가 업데이트되고 시각적 표현의 일부만 업데이트해야 하는
경우 CustomItem
은 이 메소드를 호출해야 합니다.
x
- 업데이트할 직사각형 영역의 x 좌표y
- 업데이트할 직사각형 영역의 y 좌표w
- 업데이트할 직사각형 영역의 너비h
- 업데이트할 직사각형 영역의 높이protected boolean traverse(int dir, int viewportWidth, int viewportHeight, int[] visRect_inout)
true
를 반환합니다.
또는 이 항목이 내부 순회를 지원하지 않거나 내부 순회가 항목의 끝에
도달하였으므로 가능하면 다음 항목으로 진행해야 함을 나타내려면
false
를 반환해야 합니다.
구현 시 getInteractionModes
메소드에 의해
반환되는 값의 TRAVERSE_HORIZONTAL
또는
TRAVERSE_VERTICAL
비트 중 하나나 모두를 설정하여
CustomItem
내에서 내부 순회가 지원된다는 것을 나타냅니다.
dir
매개 변수는 Canvas
게임 작업,
Canvas.UP
, Canvas.DOWN
,
Canvas.LEFT
및 Canvas.RIGHT
또는
이 순회 이벤트와 연관된 특정 방향이 없음을 나타내는
NONE
값을 사용하여 순회의 방향을 나타냅니다.
TRAVERSE_HORIZONTAL
비트를 설정한 경우
이는 순회 방향을 나타내기 위해 Canvas.LEFT
와
Canvas.RIGHT
값이 사용됨을 나타냅니다.
TRAVERSE_VERTICAL
비트가 설정된 경우
이는 순회 방향을 나타내기 위해
Canvas.UP
과
Canvas.DOWN
값이 사용됨을 나타냅니다.
두 가지 비트가 모두 설정되어 있는
경우에는 해당 항목이 2차원 순회를
수행해야 함을 나타내기 위해
순회 방향에 4개의 방향 값이
모두 사용될 수 있습니다.
dir
매개 변수는 TRAVERSE_VERTICAL
과
TRAVERSE_HORIZONTAL
비트의 모든 조합에
NONE
값을 가집니다.
순회 방향을 나타내기 위해 Canvas
게임 작업이 사용된 경우라도 이러한 게임 작업에 매핑된 키가
순회에 사용된다거나 해당 키가 순회에 사용된다는 것을
의미하지는 않습니다.
viewportWidth
와 viewportHeight
매개 변수는 항목의 컨테이너가 해당 항목에 부여한 표시 가능 영역의
크기를 나타냅니다. 이는 언제든 표시할 수 있는
항목의 최대 영역을 나타냅니다.
visRect_inout
매개 변수는 정보를
이 메소드에 전달하고 이 메소드로부터 정보를 반환하기 위해
사용되며 int[4]
배열이어야 합니다.
이 배열의 정보는 [x,y,w,h]
형식의 직사각형으로
(x,y)
는 항목의 원점에 상대적인 직사각형의
왼쪽 위 모서리 위치이며 (w,h)
는
직사각형의 너비와 높이입니다.
이 배열에 놓이는 반환 값은 traverse()
메소드가
true
를 반환하는 경우에만 중요합니다.
traverse()
메소드가
false
를 반환하면
이 값이 무시됩니다.
이 메소드가 호출될 때 visRect_inout
배열에는
현재 표시 가능한 항목의 영역을 나타내는 직사각형이 포함됩니다.
항목에서 표시되는 부분이 없는 경우(예: 오프스크린으로 스크롤된 경우)
이 영역은 0이 됩니다. 반환된 직사각형의 의미는
아래에 설명되어 있습니다.
CustomItem
은 순회가 이 항목 내에 있는지
계속 추적해야 하며, 있다면
현재 내부 위치도 기록해야 합니다.
처음에 순회는 항목 밖에 있습니다. traverse()
메소드가
처음 호출된다는 것은 순회가
해당 항목에 들어갔음을 나타냅니다.
이 메소드에 대한 후속 호출은 순회가 이 항목 내에서
발생 중임을 나타냅니다. traverseOut
메소드가
호출될 때까지 순회는 항목 내에 남아 있습니다.
CustomItem
은 항목에 들어가는 순회를
항목 내에 있는 순회와 구별할 수 있도록
순회 상태를 추적해야 합니다.
순회가 항목에 들어가면 순회 코드는
자신의 내부 순회 위치를
항목 구조 및 순회 방향에
적합한 "처음" 위치로 초기화해야 합니다.
두 번째 정책의 예로 순회
방향이 DOWN
인 경우
초기 위치는 항목의 최상위 내부 요소여야 합니다.
마찬가지로 순회 방향이 UP
인 경우 초기 위치는
항목의 최하위 요소여야 합니다.
CustomItem
은 주축이
순회의 축에 직각인 경우에도
"처음" 위치를 선택해야 합니다.
예를 들어, 지원되는 순회 모드가
TRAVERSE_VERTICAL
인
경우에도 CustomItem
은
요소의 가로 행으로 구성됩니다.
초기 순회 방향이 DOWN
인 경우
초기 위치는 맨 왼쪽 요소이고
초기 순회 방향이 UP
인 경우
초기 위치는 맨 오른쪽 요소일 수
있습니다.
순회는 특정 방향을 지정하지 않고도 항목에 들어갈 수 있는데
이 경우 순회 방향은 NONE
이 됩니다.
이는 사용자가 항목을 직접 선택하거나(예: 포인팅 장치 사용)
항목이 포함하는 Form
이 현재이기 때문에
항목에 초점이 맞춰지는 경우에 발생할 수 있습니다.
CustomItem
은 기본 순회 위치를 선택해야 합니다.
CustomItem
이 이전 위치로 순회되고
CustomItem
의 사용자 인터페이스에 적합한 경우
이전 순회 위치가 복구되어야 합니다.
순회가 항목 내에서 발생하면 내부 순회 위치는
순회 방향의 다음 적절한 영역으로 이동해야 합니다.
항목은 아래에 설명된 대로 업데이트된 내부 순회 위치를
visRect_inout
반환 매개 변수에 보고한 다음
true
를 반환해야 합니다.
항목에서는 일반적으로 사용자에게 내부 순회 위치를 표시하기 위해
강조 표시를 사용합니다. 따라서 항목은 일반적으로 각 순회
이벤트 다음에 이전 및 새 순회 위치 다시 그리기를 요청합니다.
항목이 다시 그리기를 요청한 영역이 visRect_inout
직사각형에 반환된 영역과 같아야 한다는 요구 사항은 없습니다.
시스템은 다시 그리기 요청을 스크롤의 결과로
발생할 수 있는 추가적인
다시 그리기와 결합합니다.
순회가 이미 CustomItem
내에 있으면
NONE
의 방향으로 traverse()
메소드가
호출될 수 있습니다. 이는 invalidate()
메소드를
호출한 CustomItem
서브 클래스 코드에
대한 응답으로 발생합니다.
이 경우 CustomItem
은 단순히
순회 위치의 현재 개념을 반환하기만 하면 됩니다.
내용 변경 등으로 CustomItem
이 순회 위치를
자발적으로 업데이트해야 하는 경우(순회 이벤트에 대한 응답으로가 아닌)
이 기법이 유용합니다.
순회 이벤트가 논리적으로 순회를 해당 항목의 범위를
벗어나게 만들 정도의 내부 순회 위치인 경우 항목은
traverse()
메소드에서
false
를 반환해야 합니다.
예를 들어, 현재 순회 위치가 해당 항목 맨 아래의 내부 요소이며
순회 방향이 DOWN
인 경우 traverse()
메소드는 false
만 반환해야 합니다.
이 경우 메소드는 visRect_inout
배열의 값을
업데이트하지 않아도 됩니다. 항목은 자신의 내부 순회 위치를 변경하지 않은
상태로 두어야 하며 강조 표시를 업데이트하기 위해
다시 그리기를 요청하지 말아야 합니다.
traverseOut()
메소드가 호출될 때까지
이러한 작업은 연기되어야 합니다.
순회가 실제로 항목을 떠나면 시스템은
traverseOut()
메소드를 호출합니다.
traverse()
가 false
를 반환하더라도
항목이 Form
의 가장자리에 있거나
순회를 적용할 수 있는
다른 항목이 없는 경우 시스템은
traverseOut()
메소드를
호출하지 않을 수 있습니다.
traverse()
메소드가
false
를 반환하더라도
순회 위치는 여전히 이 항목 내에 있습니다.
traverseOut()
이 호출될 때까지
이 항목 내에 남아 있습니다.
항목으로 들어감을 의미하는 초기
traverse()
호출과 항목 내의 순회를
의미하는 후속 호출 간에는 미묘한 차이가 있습니다.
초기 호출에 대한 반환 값 false
는 항목이
전혀 내부 순회를 수행하지 않음을 나타냅니다.
반면 후속 호출에 대해 false
를 반환하면
순회가 이 항목 안에 있으며
지금 나가지 않을 것임을 나타냅니다.
visRect_inout
배열에 반환된 직사각형의
너비와 높이는 스크롤 및 그리기 목적으로
Form
에서
사용합니다. Form
은 항상 (x,y)
위치에서
지정한 대로 이 직사각형의
왼쪽 위 모서리가 표시되도록 항목을 배치해야 합니다.
그리고 항목은 너비와 높이를 지정할 수도 있습니다.
이 경우 Form
은
가능한 한 이 직사각형의 많은 부분이
표시되도록 항목을 배치하려고 시도합니다.
너비와 높이가 뷰포트 크기보다 큰 경우 이 직사각형의 아래와
오른쪽 부분은 사용자에게 표시되지 않을 것입니다.
따라서 반환되는 직사각형은 일반적으로
항목 내부 요소 중 하나의 크기와
위치를 나타내며 또한 요소의 강조 표시가
그려질 위치와 반드시는 아니지만
대체로 일치합니다. 0인 너비와 높이 값은
유효하며 특별히 처리되지 않습니다.
음수인 너비 및 높이 값은 0과 마찬가지로 처리됩니다.
순회 방향과 관련하여 visRect_inout
배열에
반환되는 직사각형 위치에 대한 요구 사항은 없습니다.
예를 들어, CustomItem
이 내부 스크롤을 구현하는 경우
반환되는 직사각형이 이전 위치보다 위에 있도록
DOWN
의 순회 방향으로 인해 항목의 내용이
충분히 위로 스크롤됩니다. CustomItem
서브 클래스가
한 방향으로 계속 순회하면 결국 항목의 끝에 도달하고,
그 후 이 메소드에서 false
를 반환하여
순회가 항목의 범위를 벗어납니다.
CustomItem
이 "wraparound"
동작(예: 최하위 요소에서 아래로 순회하여 순회 위치를 최상위 요소로 이동)을
구현하면 항목 내에 순회가 트랩되므로
이 동작을 구현하면 안 됩니다.
CustomItem
이 컨테이너 뷰포트보다
작은 내부 요소로 구성된 경우 반환된 사각형은
이러한 요소 중 하나와 같은 크기여야 합니다.
하지만 CustomItem
에는 요소가
뷰포트보다 큰 컨텐트가 있거나
내부 구조가 없는 컨텐트가 있을 수 있습니다.
이러한 두 가지 경우 모두 항목은 사용자에게 표시되어야 할
컨텐트 영역의 개념을 가장
잘 나타내는 직사각형을 반환해야 합니다.
순회가 발생하면 항목은 뷰포트 크기를 기반으로 하여 순회 위치를
이동해야 합니다.
예를 들어, 뷰포트의 높이가
80
픽셀이고 순회가 아래로 발생하는 경우,
컨텐트의 10
픽셀이 겹친 상태에서
다음 내용을 화면 전체에 표시하려면 순회 위치를
70
픽셀
아래로 이동해야 합니다.
구현 시 제공하는 순회 모드에 상관없이
모든 내부 순회 위치는 도달할 수 있는 위치여야 합니다.
이는 구현 시 1차원 순회를 제공하는 경우 CustomItem
이
자신의 내부 위치를 선형화해야 함을 의미합니다.
예를 들어, 순회 모드가 TRAVERSE_VERTICAL
이고
CustomItem
이 요소의 가로 행으로 구성된다고 가정합니다.
순회 방향이 DOWN
이면 내부 순회 위치는
오른쪽으로 이동해야 하며 순회 방향이 UP
인 경우
내부 순회 위치는 왼쪽으로 이동해야
합니다(앞의 규칙은 왼쪽에서 오른쪽으로 쓰는 텍스트를 사용하는 언어에
적합하며, 그 반대 규칙은 오른쪽에서 왼쪽으로 쓰는
텍스트를 사용하는 언어에서 사용).
순회 모드가 TRAVERSE_VERTICAL
이고
CustomItem
이 요소 격자로 구성된 유사한
예를 고려해봅시다. 순회 방향 DOWN
은 위치가
행의 가장 오른쪽 요소에 도달하면 다음
아래 행으로 이동하여 각 행을 지나
왼쪽으로 진행합니다.
구현 시 2차원 순회를 제공하지만
CustomItem
이
1차원인 경우 항목 축과 일렬인
순회 방향은 항목 내에서
순회해야 하며 순회 방향이 항목 축에
직각이면 이 메소드에서 false
를 반환하여
순회는 즉시 항목의 범위를 벗어납니다.
예를 들어, CustomItem
이
요소의 수직 스택을 구현하고 있으며 순회가 이미 항목 내부에 있다고
가정하면 UP
이나 DOWN
방향으로
순회 이벤트를 수신한 경우
traverse()
메소드는
다음 요소로 이동한 다음 true
를 반환해야 합니다.
반면 RIGHT
나 LEFT
방향으로
순회 이벤트를 수신한 경우 순회가 항목의 범위를
즉시 벗어나도록 traverse()
메소드는
항상 false
를 반환해야 합니다.
내부 순회를 구현하는 항목은 항상 항목을 받아들여야 합니다.
즉 traverse()
에 대한 초기 호출은
순회 방향의 축에 관계없이 true
를 반환해야 합니다.
순회가 항목에 들어갈 때 traverse()
메소드가 false
를 반환하는 경우
항목이 내부 순회를 지원하는 시스템을 가리킵니다.
이 경우 항목은 고유 강조 표시를 수행하지 않아야 하며
시스템은 항목 외부에 있는 플랫폼에 적합한
강조 표시를 수행해야 합니다.
traverse()
메소드의 기본 구현은
항상 false
를 반환합니다.
dir
- 순회 방향,
Canvas.UP
,
Canvas.DOWN
, Canvas.LEFT
,
Canvas.RIGHT
또는 NONE
중 하나viewportWidth
- 컨테이너 뷰포트의 너비viewportHeight
- 컨테이너 뷰포트의 높이visRect_inout
- 표시 가능한 직사각형을 메소드에
전달한 다음 메소드로부터 업데이트된 순회 직사각형을 반환합니다.
true
,
순회가 범위를 벗어나는 경우 false
getInteractionModes()
,
traverseOut()
,
TRAVERSE_HORIZONTAL
,
TRAVERSE_VERTICAL
protected void traverseOut()
Form
이 더 이상 현재가 아닌 경우
traverse()
에 대한 이전 호출에 대해 false
를
반환한 CustomItem
에 대한 응답으로 발생합니다.
내부 순회를 나타내기 위해 CustomItem
이 강조
표시를 사용하는 경우 CustomItem
은 해당
상태의 강조 표시를 해제한 다음 다시 그리기를
요청합니다(항목이 더 이상 표시되지 않으면
그리기가 발생하지 않음).
getInteractionModes()
,
traverse(int, int, int, int[])
,
TRAVERSE_HORIZONTAL
,
TRAVERSE_VERTICAL
protected void keyPressed(int keyCode)
getInteractionModes
메소드가 반환하는 값에서
KEY_PRESS
비트를 설정하여
키 누르기 이벤트 전달에 대한 지원을 나타냅니다.
keyCode
- 누른 키의 키 코드getInteractionModes()
protected void keyReleased(int keyCode)
getInteractionModes
메소드가 반환하는 값에서
KEY_RELEASE
비트를 설정하여 키 놓기 이벤트 전달에 대한
지원을 나타냅니다.
keyCode
- 놓은 키의 키 코드getInteractionModes()
protected void keyRepeated(int keyCode)
getInteractionModes
메소드가 반환하는 값에서
KEY_REPEAT
비트를 설정하여 키 반복 이벤트 전달에 대한
지원을 나타냅니다.
keyCode
- 반복된 키의 키 코드getInteractionModes()
public int getGameAction(int keyCode)
Canvas
클래스의 게임 작업 절을
참조하십시오.
게임 작업에 대한 키 코드 매핑은 CustomItem
과
Canvas
가 다를 수 있습니다.
keyCode
- 키 코드
0
IllegalArgumentException
- keyCode
가
유효한 키 코드가 아닌 경우protected void pointerPressed(int x, int y)
(x,y)
좌표는 항목의 원점에 상대적이며
항상 항목 내의 위치를 나타냅니다.
구현 시 getInteractionModes
메소드가 반환하는 값에서
POINTER_PRESS
비트를 설정하여 포인터 누르기
이벤트 전달에 대한 지원을 나타냅니다.
x
- 포인터 내리기의 x
좌표y
- 포인터 내리기의 y
좌표getInteractionModes()
protected void pointerReleased(int x, int y)
(x,y)
좌표는 항목의 원점에 상대적입니다.
놓기가 발생했을 때 포인터가 항목을 벗어나더라도 구현 시
포인터 놓기 이벤트를 항목에 전달해야 합니다.
이 경우 (x,y)
좌표는 항목 범위를 벗어나는
위치를 나타냅니다. 구현 시
getInteractionModes
메소드가 반환하는 값에서
POINTER_RELEASE
비트를
설정하여 포인터 놓기
이벤트 전달에 대한 지원을 나타냅니다.
x
- 포인터 올리기의 x 좌표y
- 포인터 내리기의 x 좌표getInteractionModes()
protected void pointerDragged(int x, int y)
(x,y)
좌표는 항목의 원점에 상대적입니다.
포인터가 항목 외부로 이동되더라도
구현 시 포인터 끌기 이벤트를
항목에 전달해야 합니다.
이 경우 (x,y)
좌표는 항목 범위를 벗어나는
위치를 나타냅니다. 구현 시 getInteractionModes
메소드가 반환하는 값에서 POINTER_DRAG
비트를
설정하여 포인터 끌기 이벤트 전달에
대한 지원을 나타냅니다.
x
- 포인터 끌기의 x
좌표y
- 포인터 끌기의 y
좌표getInteractionModes()
protected void showNotify()
showNotify()
가 호출된 다음 항목은 paint()
호출을 받습니다.
이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
protected void hideNotify()
showNotify()
가 다시 호출될 때까지는
이 항목에 대한 paint()
를 호출하지 않습니다.
이 메소드의 기본 구현은 어떤 작업도 하지 않습니다.
|
MID 프로필 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |