我想添加一個自定義的可滾動JComponent到JFrame。自定義JComponent大小默認爲零?
JScrollPane sp = new JScrollPane(hg);
frame.getContentPane().add(sp, BorderLayout.CENTER);
hg是我的自定義組件。
問題是我的自定義組件不顯示。但是,如果我這樣做:
hg.setBounds(0, 0, 800, 600);
然後它會顯示。但我當然不想明確設置大小。我希望它適合框架的中心。
在我的自定義JComponent類,我重寫的getPreferredSize():
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;
}
但是,這似乎並沒有產生任何影響。即使我直接返回固定尺寸:
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
這也不起作用。
我還在我的ComponentUI的paint()方法中添加了println,但沒有打印任何東西,所以我認爲由於某種原因不調用paint()。我想爲什麼我的自定義組件的大小默認爲零,我不知道如何讓它調整自己的大小。
所以我的問題是:爲什麼我的JComponent默認情況下不顯示,我應該怎麼做才能使它自動適應JFrame的中心?
謝謝!
爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –
安德魯,謝謝你告訴我! –
你提到了一個'paint()'方法。有兩件事情:(1)最好重寫'paintComponent'而不是'paint',因爲它可以讓Swing繪製邊框和東西; (2)應該是'paint(Graphics g)',對嗎?如果不是,那麼'paint()'永遠不會被調用。這就是爲什麼[@Override](http://docs.oracle.com/javase/7/docs/api/java/lang/Override.html)有用。 – wchargin