所以我有一个类可以将东西绘制到JPanel中,但为了做到这一点,我需要在构造函数中实例化多边形。但我对此有点困惑;我创建了JFrame并添加了JPanel扩展类" Field"就这样,
public class Field extends JPanel implements ActionListener{
public Field(){
System.out.println(getWidth());
}
@Override
public void paintComponent(Graphics g){
System.out.println(getWidth());
}
@Override
public void actionPerformed(ActionEvent arg0) {
repaint();
}
}
这是JPanel的代码:
{{1}}
为什么构造函数中的getWidth()调用打印为0,而paintComponent方法中的getWidth()调用返回594?事实上 - 为什么这些数字中的任何一个都不是我期待的600?为什么他们变化?
答案 0 :(得分:2)
摆动组件在构造时还没有宽度。首先必须将其添加到容器中,然后布局管理器将为组件分配位置和尺寸。
至于为什么它不是600而是594 - 每个挥杆组件都有边框所占据的“插图”。它们具有默认宽度,具体取决于您的PLAF。在这种情况下,JFrame内容窗格左侧和右侧的插图可能是3像素和3像素,最多可加6,而6 - 6 = 594。
答案 1 :(得分:0)
JPanel默认LayoutManager是BorderLayout,组件的大小在BorderLayout.layoutContainer中计算,当构造函数被调用时,BorderLayout.layoutContainer没有调用;