JFrame에 사용자 정의 스크롤 가능한 JComponent를 추가하려고합니다.사용자 정의 JComponent 크기의 기본값은 0입니까?
JScrollPane sp = new JScrollPane(hg);
frame.getContentPane().add(sp, BorderLayout.CENTER);
hg는 사용자 정의 구성 요소입니다.
문제는 내 사용자 지정 구성 요소가 표시되지 않는 것입니다. 그러나 이렇게하면 :
hg.setBounds(0, 0, 800, 600);
그런 다음 표시됩니다. 물론 크기를 명시 적으로 설정하고 싶지는 않습니다. 프레임의 중앙에 맞추기를 원합니다.
private Dimension computePreferredSize() {
return new Dimension((int) (this.getParent().getSize().width * scale),
(int) (this.getParent().getSize().height * scale));
}
public Dimension getPreferredSize() {
Dimension d = computePreferredSize();
System.out.println("Dimension: " + d); // prints reasonable output: Dimension: java.awt.Dimension[width=1201,height=805]
return d;
}
을하지만 이것은 어떤 영향을 미칠 것 같지 않습니다 내 사용자 정의 JComponent의 클래스에서
, 나는()로 getPreferredSize 우선합니다. 고정 된 크기를 직접 반환하더라도 :
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
이 방법은 작동하지 않습니다.
내 ComponentUI의 paint() 메소드에서도 println을 추가했지만 아무것도 인쇄되지 않으므로 paint()가 호출되지 않은 것으로 생각됩니다. 그 이유는 내 사용자 지정 구성 요소의 크기가 0으로 기본 설정되어 있으며 자체 크기를 조정하는 방법을 모르겠습니다.
내 질문은 : 왜 내 JComponent가 기본적으로 표시되지 않으며 JFrame의 중심에 자동으로 맞춰 지도록해야합니까?
감사합니다.
더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –
Andrew, 그것에 대해 말해줘서 고마워 !! –
당신은'paint()'메소드를 언급합니다. 두 가지 : (1)'paintComponent'를'paint'보다 우선 적용하는 것이 좋습니다. 왜냐하면 Swing이 테두리와 물건을 페인트 할 수 있기 때문입니다. (2)'paint (Graphics g)'이어야합니다, 맞습니까? 그렇지 않다면,'paint()'는 결코 호출되지 않을 것이다. 이것이 [@Override] (http://docs.oracle.com/javase/7/docs/api/java/lang/Override.html)가 유용한 이유입니다. – wchargin