2010-11-21 4 views
3

저는 학교 자바 프로젝트를위한 Connect Four 게임을 만들고 있습니다. JLayeredPane의 '방법'을 얻었고 예상대로 작동하지만 특정 개념의이면에 '이유'가 표시되지 않습니다.JLayeredPane : 깊이와 위치의 기능상의 차이점은 무엇입니까?

의 JLayeredPane는 각 구성 요소에 대한 깊이와 위치를 지정할 수 있습니다 JPanel의 유사한 컨테이너입니다 :

여기 나의 이해이다. 깊이는 정수이며 0이 맨 아래 레이어이고 n-1이 맨 위 레이어이며 n은 구성 요소 수입니다. position은 레이어 내에서 구성 요소의 위치를 ​​지정하는 int입니다 (예, Integer 래퍼 클래스를 사용하고 하나는 원시입니다!). 0은 최상위 레이어이고 -1은 맨 아래 레이어이고 양수 ints는 양수입니다. 사이에 숫자가 낮을수록 위치가 높아집니다. 따라서 단일 레이어의 4 개 구성 요소는 최상위에서 최하위로 0, 1, 2, -1 위치로 정렬 할 수 있습니다.

제 질문은 두 개념을 모두 가지고 있어야한다는 것입니다.

예를 들어, 이미지가있는 세 개의 JLabels : frontBoard, backBoard 및 piece를 만들었습니다. 이 작품은 때때로 프론트 보드 앞쪽으로 가고 때로는 프론트 보드와 뒷좌석 사이로 간다. 두 번째 예제를 살펴 보겠습니다.

I 이러한 방법 중 하나를 통해 동일한 효과를 얻을 수

1) I는 0 층 백보드를 설정할 수 있고, 위치 0; 레이어 1, 위치 0에 조각; 상기 frontBoard는 I가 0 층 백보드를 설정할 수 0

or 

2)의 위치, 2 층에 위치 -1; 레이어 0, 위치 1에 조각; 및 레이어 0, 위치 0 앞쪽 보드

나는 두 가지 방법으로 테스트 한 두 가지 방법 간의 기능적 차이를 찾을 수 없습니다.

누군가 나를 위해이 수수께끼에 어떤 빛을 비출 수 있습니까?

답변

1

우선, 이러한 경우에 할 수있는 가장 좋은 것은 그들이 일반적으로 매우 유익한 튜토리얼을 살펴 가지고 있습니다 : http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

또한, 클래스 자체의 javadoc는이 꽤 좋은 설명이 포함되어 way JLayeredPane가 동작합니다.

이미 프로젝트를 구현 했으므로 각 구성 요소를 자체 레이어에 배치하거나 동일한 레이어의 다른 위치 값에 서로 다른 위치 값을 할당하여 두 가지 방식으로 구성 요소를 스태킹 할 수 있다는 것을 알고 있습니다. 효과는 동일하지만 당신은 그것을 달성하기 위해 두 개의 서로 다른 속성을 사용합니다 :

  • "깊이"계층의 한 속성입니다 : 깊이 0 레이어가 먼 있도록 그들은 열거 가장 낮은 것. 높은 깊이의 레이어는 낮은 깊이의 레이어를 덮습니다.
  • 레이어가 둘 이상의 구성 요소를 포함 할 수 있고 구성 요소가 항상 겹칠 수 있기 때문에 구성 요소의 Z 오더를 정의하는 방법이 있어야합니다. "위치의 구성 요소를 열거하여 레이어 내에서 정의합니다. " 값.레이어에 n 구성 요소가 있고 0에서 계수하기 시작하면 위치는 0과 n-1 사이의 값이어야합니다.

"position"값을 가지고 있기 때문에 모든 구성 요소를 단순히 "위치"값을 통해 z 축을 따라 배치 할 수 있기 때문에 다중 레이어가 필요하지 않다고 주장 할 수 있습니다. 그건 사실이고 아무도 그렇게하지 못하게합니다.

당신이 미리 정의 된 상수가 층의 "깊이"값에 사용되는 것을 깨닫게 때 여러 레이어에 대한 이론적 근거를 볼 수 있습니다 : MODAL_LAYER

  • DEFAULT_LAYER
  • PALETTE_LAYER
  • POPUP_LAYER
  • DRAG_LAYER

다음은 몇 가지 스태킹 제약 조건이 충족되는지 확인하는 데 도움이되는 복잡한 다중 창 응용 프로그램에 대한 논리적 그룹입니다. 주 응용 프로그램 프레임 위에 나타나는 모달 대화 상자 창을 만들려한다고 가정 해보십시오. 단일 레이어를 사용하는 경우에는 모든 보이는 구성 요소의 위치를 ​​직접 추적하고 대화 상자의 위치를 ​​n으로 설정해야합니다. 드래그 앤 드롭 애니메이션, 팝업 메뉴 등을 추가하면이 작업이 상당히 복잡해집니다.

미리 정의 된 레이어를 사용하면 이러한 복잡성이 줄어 듭니다. 모달 대화 상자 창을 표시하려는 경우 주 응용 프로그램 창의 구성 요소는 신경 쓰지 않고 MODAL_LAYER에 배치하면 완료됩니다. 다른 모든 구성 요소 위에 표시 될 수 있습니다. .

운 좋게도 스윙은 JLayeredPane 또는 그 하위 클래스를 사용하여 내부적으로이 모든 작업을 수행하므로 JDialog에서 setVisible (boolean) 또는 setModal (boolean)을 호출하면 예상대로 작동합니다. 그것까지.

+0

미리 정의 된 상수를 사용하는 것이 쉽습니다. 나는 두 가지 방법 사이에 실제적인 기능적 차이점을 찾기를 희망했지만, 나는 당신이 정확하다고 믿는다. "위치"에 대한 설명에서 가장 아래의 위치가 -1이고 맨 위의 위치는 0이며 그 사이의 유효한 값은 n-1이 아니라 n-2가 될 것이라고 언급합니다. . 답변 해 주셔서 감사합니다. – NeutralAngel