2011-09-14 3 views
2

JButton이 동적으로 만들어지면 바닥 글 (예 : JLabel)이 그리드 하단에 머물러 있고 동적으로 생성 된 버튼이 바닥 글 바로 위에 오도록 내 GridLayout에있는 항목을 다시 정렬해야합니다.Java를 사용하여 그리드 레이 아웃에서 항목을 동적으로 재 배열 할 수 있습니까?

이것이 가능합니까? 그렇다면 예제를 볼 수 있습니까?

내 그리드는 현재 intIndex가 동적 요소가 생성 될 때마다 증가하는

new GridLayout(intIndex, 1); 

입니다.

답변

4

바닥 글이므로 BorderLayout을 사용하고 바닥 글의 하단을 BorderLayout.PAGE_END으로 유지하려고합니다. 그런 다음 BorderLayout.CENTER을 사용하여 가운데에 GridLayout과 함께 구성 요소를 놓습니다. 이렇게하면 바닥 글이 항상 하단에 유지되고 내용을 간섭하지 않으므로 바닥 글에 영향을주지 않고 레이아웃 관리자를 사용하도록 변경할 수 있습니다.

바닥 글이 바닥 전체에 걸쳐 있으면 좋지만 바닥면에 작은 바닥 글을 만들려는 경우 조금 더 어려울 것입니다. 꼬리말을 내용과 별도로 유지하려고하는 것이 좋습니다.

+0

의견을 보내 주셔서 감사합니다. 내가 가지고있는 유일한 문제는 레이아웃에 항목을 추가 한 후 pack()을 사용하여 "재 포장"하려고하는 것입니다. 새로운 크기가 아니라 재 포장됩니다. 어떤 아이디어? –

+0

'JFrame'또는 일부 중량 컨테이너에 구성 요소를 직접 추가하지 않는 한'pack()'을 호출 할 필요가 없습니다. 어떤 구성 요소가 자신에게 맞게 크기가 조정되지 않습니까? 조금 더 자세하게 설명해 주시겠습니까? –

+0

BorderLayout.CENTER 위치의 gridlayout에 새 패널을 추가 할 때 JFrame 종류가 이전 패널과 겹치고 pack이 jframe의 크기를 적절한 크기로 조정할 것이라고 생각했습니다. –

1

하나의 대답이 받아 들여 지더라도 추가 할 수 있다고 생각합니다.

레이아웃 용 인터페이스는 LayoutManagerLayoutManager2입니다. 두 번째 것은 첫 번째 것을 확장합니다. 따라서 모든 레이아웃 클래스는 LayoutManager에서 상속됩니다.

이제 LayoutManager2을 사용하면 몇 가지 제약 사항에 따라 구성 요소를 정렬 할 수 있습니다. 예를 들어, Shakedown의 대답에서 BorderLayout.CENTERBorderLayout의 제약 조건입니다.

그러나 이러한 구성 요소는 LayoutManager 만 구현하면 특정 구성 요소에 대한 제약 조건을 허용하지 않습니다. GridLayout과 같은 레이아웃입니다. 왼쪽 상단 모서리에서 구성 요소를 추가하고 오른쪽으로 계속 진행하고 한 줄이 가득 차면 다음 줄로 이동합니다.

GridBagLayout에 관심이있을 수 있습니다.