如何从构造函数中获取JPanel的宽度和高度?

时间:2016-09-14 02:18:53

标签: java polygons

所以我有一个类可以将东西绘制到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?为什么他们变化?

2 个答案:

答案 0 :(得分:2)

摆动组件在构造时还没有宽度。首先必须将其添加到容器中,然后布局管理器将为组件分配位置和尺寸。

至于为什么它不是600而是594 - 每个挥杆组件都有边框所占据的“插图”。它们具有默认宽度,具体取决于您的PLAF。在这种情况下,JFrame内容窗格左侧和右侧的插图可能是3像素和3像素,最多可加6,而6 - 6 = 594。

答案 1 :(得分:0)

JPanel默认LayoutManager是BorderLayout,组件的大小在BorderLayout.layoutContainer中计算,当构造函数被调用时,BorderLayout.layoutContainer没有调用;