2009-09-06 9 views
1

Java GUI 개발에 어려움을 겪고 있습니다 (!). 명백한 의미를 갖는 이러한 모든 작은 것들은 작동하지 않습니다.Java의 setPreferredSize의 크기가 조정되지 않습니다. JPanel

내가 패널 내부에있는이 Graphics2D의 객체를 가지고 : 내가 뭘하려고 어디서 (이 매우 실망) 실패하고 무엇을 설명 할 것이다. 이제이 그래픽은 이미지를 그립니다. 영원히 계속 될 수 있습니다. 이 그림은 끔찍하게 확장되고 어떤 크기를 기대하는지 알지 못하기 때문에 스크롤 판 안에 넣습니다. 이제 각 pain iteration에서 JPanel의 크기를 조정하고 setPreferredSize를 더 큰 값으로 설정하여 스크롤 패널의 노브를 확장하려고합니다.

문제

: 내가 아무것도하지 않는 페인트에서 setPreferredSize를 호출 할 어떤 이유에서. 나는 그것을 패널에서 부른다. 페인트를 호출하는 함수에서 setPreferredSize를 호출하면 크기 조정 작업이 한 번만 수행됩니다!

그 이유가 무엇일까요?

다른 작은 질문이 있는데, 다음과 같이 해결하고 싶습니다. 그래픽 그리기가 계속되고 크기가 커지기 때문에 스크롤 판 위치를 어떻게 향상시킬 수 있습니까? 점차적으로 그것을 증가 시키는가?

사람들, 정말 고마워요. 나는 당신이 잘못 몇 가지를 가지고 같은

답변

6

preffered 크기는

+0

와우, revalidate가 실제로 트릭을 수행했다. 건초 더미에서 바늘을 찾는 것. 스크롤바를 앞으로 나아가는 방법을 알고 있습니까? – vondip

+0

왜이 주제에 대해 여러 가지 질문을합니까? 당신은 다른 게시물에 anser가 주어졌지만 아직 질문을 받아 들일 수는 없습니다. 물론 paintComponent() 메서드에서 setPreferredSize를 호출하면 안됩니다. 그리고 당신은 그 메소드로부터 revalidate를 호출해서는 안됩니다. 모든 질문을 한꺼번에 모았을 때 모두가 제안한 사실을 알게되고 동일한 제안을하는 데 시간을 낭비하지 않을 것입니다. 앞으로 귀하의 질문에 SSCCE를 게시하십시오. SSCCE가 무엇인지 모르는 경우 웹을 검색하십시오. – camickr

+0

@unknown : 별도의 스레드에서 요소를 스크롤 해 봅니다. 어쩌면 유효성 검사 프로세스가 완료되지 않은 상태에서 어딘가에 설정하는 시나리오가있을 수 있습니다.이 프로세스는 scroller를 0으로 다시 설정합니다. –

2

나에게 소리 여기에 도움이 필요합니다.

  • 당신이 정말로 호출되는 된 페인트시기와 빈도를 알 수 없기 때문에, 아마도 이상한 동작이 발생합니다 paint 메소드 내부의 모든 크기 속성 (모든 구성 요소의 actuallly 모든 속성)을 설정

  • 일반적으로 자신을 페인트하지 마십시오. 나는 그것이 바로 당신이 구성 요소를 갖고 싶어 가지고있는 경우 구성 요소가

  • 볼 수있게되면 그것은, 스윙에 의해 자신을 호출되는 것, 그 시간이 증가한다. IMHO 올바른 방법은 타이머를 만드는 것입니다. 타이머를 사용하여 필요에 따라 크기를 변경하십시오. 페인트 방법에서는이 정보를 읽고 무엇을 페인트할지 결정합니다.

+0

음, 이미 한 번씩 repaint 메서드를 호출하는 타이머가 있습니다. 구성 요소의 크기를 직접 설정하고이 이상한 점을 발견했습니다. 화면 이동 막대를 원위치로 이동하면 JPanel이 갑자기 크기가 조정됩니다. 어떤 아이디어? 그리고 어떻게 스크롤 창을 앞으로 나아갈 수 있습니까? – vondip

+0

변경 사항에 대해 업스트림 구성 요소 (JScrollpane)에 알릴 필요가있는 것 같습니다. 내가 맞으면 invalidate() 하는게 옳은 일이지만, 나는 완전히 확신 할 수 없다. –

1

setPreferredSize 당신이 LayoutManager에에게 줄 수있는 많은 힌트 중 하나입니다 ..., 이름으로, 강제적이지 ... 아마도 (팩) 또는 도움이 될 것이다) (재 검증하는 실제로 LayoutManager가 설정된 경우 구성 요소 컨테이너의 레이아웃을 관리합니다. 지정된 힌트를 사용하면 (자), 지정된 LayoutManager에 해주세요.

Filthy Rich Clients 스윙 구성 요소 렌더링 작동 방식에 대한 자세한 설명을 읽어 보시기 바랍니다.

1

설정 (기본/최소/최대) 크기()는 상위 구성 요소 및 레이아웃 관리자에게 구성 요소의 용량을 알려주는 것일뿐입니다. 또한 이러한 크기는 구성 요소가 배치 될 때 (처음 렌더링, 무효화() 될 때만) 해석된다는 점에 유의하십시오.

관련 문제