2010-01-04 4 views
1

잠시 동안 게임을 개발 중이며 현재 GUI를 다시 작업 중이거나 적어도 시도하고 있습니다. 레이아웃 관리자를 잘 이해하지 못했기 때문에 문제없이 프레임 크기를 조정할 수 없다는 큰 문제가있었습니다. 나중에 몇 가지 프로젝트와 다시 돌아와 게임에서 더 많은 시간을 할애하고 문제가 발생했습니다 ...BorderLayout 제약 조건이 CENTER 인 경우 JScrollPane이 표시되지 않습니까?

메인 프레임의 기본 레이아웃은 mainPane이며 하나의 gameScrollPane과 하나의 controlPanel을 포함합니다. 스크롤 창은 스크롤 창이고, 제어판은 일반 창입니다. 스크롤 창에는 기본 게임 패널이 있습니다.

스크롤 패널이 대부분의 화면을 차지하고, 컨트롤 패널이 게임과 같이 많은 Sim과 거의 같은 작은 더 낮은 영역을 차지하기 때문에 mainPane의 테두리 레이아웃을 선택했습니다. 스크롤 창을 추가하고 제약 조건 CENTER를 설정하고 제어판을 추가하고 나머지를 constriants로 설정합니다. 이것은 스크롤 창을 표시하지 않았으므로 다른 제약 조건을 시도해 보았습니다. 그리고 스크롤 창 제약을 북쪽으로 설정 한 경우에만 표시됩니다. 당신이 볼 수 있듯이 나는 CENTER 북쪽의 값을 변경하고 다시 실행하면

이 문제를 설명하기 위해, 나는 빠른 비디오를 만들었습니다 ... http://screenjel.ly/q5RjczwZjH8

는, 그것 거기처럼!

이 문제 이후 다른 질문을 시작할 수있는 명확한 두 번째 문제를 볼 수있는 사용자를위한 보너스 포인트가 해결되었습니다.

시간을내어 읽어 주셔서 감사합니다. 나는 비디오가 보여 얻을 수있는 아이디어 나 생각 :)

REL

답변

1

에 미리

감사합니다. 그것은 오래 동안 완충기였습니다.

내 생각 엔 스크롤 패널이 실제로 가운데를 채우는 것입니다. 게임 패널이 표시되지 않습니다.

게임 패널은 getPreferredSize()에 대해 적절한 값을 반환해야합니다.

업데이트

당신이 할 수있는 또 다른 점은 게임 패널은 Scrollable 인터페이스를 구현해야합니다. 그런 다음 및 ...height을 다시 정의하여 true을 반환하면 패널이 스크롤 판의 크기로 강제 설정됩니다.

+0

그렇다면 스크롤 막대가 계속 나타나야합니까? 크기를 1400으로 1000을 반환합니다. 그게 무리한가요? – Relequestual

+0

음, 스크롤 막대는 활성화되어있는 경우에만 표시됩니다 (정책에서 설정). 하지만 1400 x 1000은 합리적인 크기이며 GUI보다 크기 때문에 강제로 표시해야합니다. 내 강력한 추천은 우리에게 몇 가지 소스 코드를 제공하는 것입니다! –

+0

다시 업데이트 : 패널 (클라이언트)은 스크롤 패널의 크기보다 커야하지만 분명히 그 점을 물리 칠 수 있습니까? 나는 네가 의미하는 바를 완전히 이해하지 못하고 있다고 생각한다. 좀 더 정교하게 만들어 줄 수 있겠 니? – Relequestual

3

몇 가지 코드를 게시하여 시작한다면 정말 빠른 답변을 얻었을 것입니다. 다행히도, 댓글에 다른 응답에 대한 링크를 게시했습니다.

setContentPane() 항목은 이상하게 들리지만 특히 그 일을 수행 한 후에는 지워집니다. 그러나 그것은 당신의 문제가 아닙니다.

아무런 제약없이 mainPane에 rightMaker와 personMover 권한을 추가하는 것이 문제입니다. 이것들은 CENTER ...이 경우에는 이전에 설정된 gameScrollPane에 설정 한 모든 것을 날려 버릴 것입니다.

그래서 북쪽이 아닌 CENTER를 볼 수 있습니다.

+1

+1 "올바른"문제를 찾기위한 +1, 그리고 나보다 더 빨리 : –

+0

당신은 정확하지만, 그들은 JInternalFrame의, 그래서 나는 그들을 자유롭게 움직일 수 있기를 원한다. 추가 제안 사항이 있으십니까? – Relequestual

+0

그러면 이상한 일을하고 계십니다. 내가 JDesktopPane을 사용하고 테두리 레이아웃을 설정하는 것이 이상하다고 생각했습니다. 당신은 두 가지 방법 모두 가질 수 없습니다. JDesktopPane에 의해 JInternalFrames가 주위에 떠도는 일도, BorderLayout의 컴퍼넌트 만이 받아 들여집니다. 어딘가에 완전히 다른 창을 사용한다는 것은 정말로 의미합니까? 어쩌면 게임 창이 최대화되었거나 뭔가 있을까요? – PSpeed

관련 문제