我正在尝试将自定义可滚动 JComponent 添加到 JFrame。
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 的中心?
谢谢!