gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:22:05 26 4
gpt4 key购买 nike

所以我有一个类可以将东西绘制到 JPanel 中,但要做到这一点,我需要在构造函数中实例化多边形。但我对此有点困惑;我创建 JFrame 并向其添加 JPanel 扩展类“Field”,如下所示,

public class mainSetup {
public static void main(String[] args){
JFrame frame = new JFrame();
frame.setSize(600,600);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(new Field());
frame.pack();
}

}

这是 JPanel 的代码:

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();

}


}

为什么构造函数中的 getWidth() 调用会打印 0,而 PaintComponent 方法中的 getWidth() 调用会返回 594?事实上 - 为什么这两个数字都不是我预期的 600?为什么它们会有所不同?

最佳答案

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

至于为什么不是 600 而是 594 - 每个 swing 组件都有被边框占据的“插图”。它们有一个默认宽度,具体取决于您的 PLAF。在本例中,JFrame 内容 Pane 左侧和右侧的插图可能分别为 3 和 3 个像素,加起来为 6,即 600 - 6 = 594。

关于java - 如何从构造函数中获取 JPanel 的宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com