2010-12-12 2 views
1

JLabel의 크기를 조정하려고 할 때 문제가 있습니다. 내 응용 프로그램에서 다음 strucutre 나타납니다. 이전 목록 항목 내부의 항목과 같은 모든 목록 항목을 이해합니다.JLabel의 setSize 변경 후 preferredSize 변경

  • JFrame (레이아웃 널, 고정 크기, 크기 조정 불가능, 다른 사람들이 사용).

  • JPanel (레이아웃 null, 모든 창 크기, 장소는 제 작업이었습니다).

  • 레이아웃이 다른 다양한 JPanel (기본 패널 내부의 내용 영역, html div ...와 같이 생각할 수 있습니다).

  • 레이아웃 null이있는 "divs"중 하나에는 흐름 레이아웃이있는 JPanel의 확장 클래스가 있습니다.

  • 이 extedend의 모든 내부 클래스는 preferredSizes가있는 레이블입니다.

이 모든 것을 작성한 후에 theFrame.setVisible (true); 모든 것은 훌륭하게 작동합니다.

그러나 내 응용 프로그램의 흐름 순간에 나는 레이블 중 하나의 크기를 변경해야합니다. 그런 다음 label.setPreferredSize (d)를 호출하면 변경 내용이 변경되지 않습니다. 이 함수는 프레임이 보이기 전에 호출하면 효과적이지만, 이후에는 그렇지 않습니다.

나는 pack(), validate(), repaint() 등과 같은 것이 아무것도 사용하지 않는다는 느낌이 들었습니다. 왜 그것이 작동하는지 모르니까요. 재 호출을 호출하고 jlabel에 유효성을 검사하고 기본 패널을 다시 칠하지만 작동하지 않습니다.

저는 awt와 스윙에 대해 상대적으로 새로운 것으로 숙제입니다. 영어를 잘못 사용해서 죄송합니다. 도움을 주셔서 감사합니다.

답변

1

JLabel의 크기를 변경 한 후에는 revalidate()으로 전화하십시오. 이로 인해 재 레이아웃 (예 : 부모 프레임 크기 조정 등)을 트리거하는 이벤트를 기다리지 않고 JLabel의 크기를 조정할 수 있습니다.

JLabel lbl_test; 

lbl_test.setPreferredSize(new Dimension(100, 100)); 
lbl_test.revalidate(); 

내가 어떤 클래스에서 문제가 있는지 확실하지 않으므로 한 가지 더 유의해야 할 점이 있습니다. 레이아웃 관리자와 혼합 된 널 (Null) 레이아웃 (절대 위치 지정)은 이상한 일이 발생할 수 있습니다.

+0

매우 감사합니다. 그거야. revalidate의 사용법에 대해서도 설명해 주셔서 감사합니다. – davidgnin