Java JFrame fillRect方法绘制错误的矩形大小

Java JFrame fillRect方法绘制错误的矩形大小,java,swing,graphics,jframe,drawrectangle,Java,Swing,Graphics,Jframe,Drawrectangle,我开始试验JFrame,我想完成的第一个任务是使用fillRect()或drawRect()方法绘制一个50px的正方形。不幸的是,在运行之后,程序显示的是一个矩形而不是正方形 我的代码: package javaapp; import java.awt.Graphics; import javax.swing.JFrame; public class JavaApp extends JFrame{ public JavaApp() { setTitle("Voo

我开始试验JFrame,我想完成的第一个任务是使用
fillRect()
drawRect()
方法绘制一个50px的正方形。不幸的是,在运行之后,程序显示的是一个矩形而不是正方形

我的代码:

package javaapp;

import java.awt.Graphics;
import javax.swing.JFrame;

public class JavaApp extends JFrame{

    public JavaApp() {
        setTitle("Voorbeeld");
        setSize(250, 250);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public void paint (Graphics g){
        g.fillRect(0, 0, 50, 50);
    }
    public static void main(String[] args) {
        new JavaApp();
    }   
}

帧实际上从左上角开始。只需添加一个JPanel并在其上绘制即可。否则,您可以调用
setUndercorated(true)


改用paintComponent。

或者,因为顶级容器不是双缓冲的,所以使用
JPanel
并替代它的
paintComponent
方法,如“我的GUI中的原点关闭了大约25/26像素”中所述。该标题与JFrame无关,甚至与Java无关。我怎么知道它是复制品?用标题名中的“像素”分析所有问题?我不知道,这是一个常见的问题,有多个答案。花点时间研究这个问题可能会有所帮助,也许是检查教程或文档?事实上,它是一个复制品并不是问题所在,帮助你找到答案是。正如您可能注意到的,现在“被接受”的答案实际上是错误的,并且对其他可能有类似问题的开发人员具有误导性
class JavaApp extends JFrame {

    public JavaApp() {
        setTitle("Voorbeeld");
        setSize(250, 250);
        setResizable(false);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        add(new JPanel() {
            protected void paintComponent(Graphics g) {
                g.setColor(Color.BLACK);
                g.clearRect(0, 0, getWidth(), getHeight());
                g.fillRect(0, 0, 50, 50);
            }
        });
    }

    public static void main(String[] args) {
        new JavaApp();
    }
}